C Перенаправление заставляет scanf не принимать ввод - PullRequest
0 голосов
/ 16 февраля 2019

По какой-то причине scanf не работает должным образом после использования перенаправления c для передачи ввода в stdin.Я тестировал тот же код без перенаправления c, и он прекрасно работает.

Кроме того, я попытался очистить stdin перед выполнением операций scanf с fflush (stdin) , и это также помоглоне работает.

Запуск моего исполняемого файла, например

./3240Assignment0 < test-input.txt

Код для запуска операции scanf выглядит следующим образом

int main(int argc, char** argv){
    fflush(stdin);
    char input[100];
    char *output = "Thank you for your message!";

    puts("Tell me something nice:");
    scanf("%s", input);
    printf("%s\n\n", output);
}

Проблема в том, что терминал не работаетне дает мне возможность вводить любую информацию или ввод.

Скрипт моего терминала

Joes-MacBook-Pro:a0 joemanto$ make test
./3240Assignment0 < test-input.txt
Tell me something nice:
Thank you for your message!

Joes-MacBook-Pro:a0 joemanto$ 

1 Ответ

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

Он принимает входные данные, он просто принимает входные данные из файла, о котором вы сказали, что принимать входные данные.

У вас есть три варианта с STDIN:

  • assignment:Интерактивный ввод
  • assignment < input.txt: получение ввода из файла
  • command | assignment: получение ввода из результата команды command (pipe)

Поскольку выПри использовании второй формы вы также не можете использовать интерактивный ввод.Это один входной источник и только один.

...