分享
为什么问答平台  ›  专栏  ›  技术社区  ›  Tom1

为什么在vim中运行c代码skip scanf()? - Why does running C code in Vim skip scanf()?

  •  2
  • Tom1  · 技术社区  · 5 月前

    我在ArchLinux中使用neovim和gcc c编译器,这是我在.vimrc中用来编译和运行的。

    map <F5> :w <CR> :!gcc % -o %< && ./%< <CR>

    问题是,我的代码运行良好,但任何scanf()函数都不会提示输入,并且会在程序运行时被忽略。即使在用vim编译之后,然后在单独的zsh终端中运行,它也允许我在用 ./x

    我提前道歉,我是Vim的新手,想用这个来加快我的工作流程。

    以下代码显示了该问题:

    #include <stdio.h>
    
    int main()
    {
        char Team1[20]; 
        char Team2[20]; 
        int team1Score, team2Score; 
        printf("Please enter the name of team one: ");
        scanf("%s", Team1);
        printf("Please enter the name of team two: ");
        scanf("%s", Team2);
        printf("Please enter the score for %s: ", Team1); 
        scanf("%d", & team1Score); 
        printf("Please enter the score for %s: ", Team2); 
        scanf("%d", & team2Score);
        if (team1Score > team2Score)
        {
            printf("%s scores 3 points and %s scores 0 points", Team1, Team2 );
        }
        else
          if (team1Score < team2Score) 
            {
                printf("%s scores 3 points and %s scores 0 points", Team2, Team1 ); 
            }
            else
        {
                printf("Both %s and %s score 1 point", Team1, Team2); 
        }
        return 0;
    }
    
    1 回复  |  直到 5 月前
        1
  •  3
  •   sdobak    5 月前

    故障可能不在您的程序中,但VIM执行它的方式。如果您检查 :! 命令,然后您可以看到以下内容:

    该命令在连接到管道(而不是 终端)。

    非交互式shell是指不允许输入用户命令的shell。您的程序不会从终端读取scanf输入,而是从vim创建的管道读取scanf输入。

    如果您使用的是最新版本的VIM(8.0或更高版本,如果我是对的)或Neovim,那么您可以使用 :term 命令打开终端。在该终端中,您将能够输入用户输入。