Почему запуск кода C в Vim пропускает scanf ()? - PullRequest
0 голосов
/ 12 февраля 2019

Я использую neovim в arch linux с компилятором 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 Ответ

0 голосов
/ 12 февраля 2019

Возможно, ошибка не в вашей программе, а в том, как vim ее выполняет.Если вы посмотрите документацию по команде :!, то увидите следующее:

Команда запускается в неинтерактивной оболочке, подключенной к каналу (не к терминалу).

Неинтерактивная оболочка означает оболочку, которая не позволяет вводить пользовательские команды.Ваша программа не будет читать входные данные scanf из терминала, а из канала, который был создан vim.

Если вы используете последнюю версию vim (8.0 или более позднюю, если я прав) или neovim, тоВы можете использовать команду :term, чтобы открыть терминал.В этом терминале вы сможете ввести пользовательский ввод.

...