为什么在Vim中运行C代码会跳过scanf()?

时间:2019-02-12 13:07:36

标签: c linux gcc vim scanf

我在带有gcc C编译器的arch linux中使用neovim,这就是我在.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 个答案:

答案 0 :(得分:4)

故障可能不在您的程序中,而是vim执行该程序的方式。如果查看:!命令的文档,则可以看到以下内容:

  

该命令在连接到管道的非交互式外壳中运行(不是   终端)。

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

如果您使用的是vim的最新版本(如果正确,请使用8.0或更高版本)或neovim,则可以使用:term命令打开一个终端。在该终端中,您将可以输入用户输入。