C重定向导致scanf不接受输入

问题描述 投票:1回答:1

由于某种原因,使用c重定向将输入传递给stdin后,scanf无法正常工作。我已经测试了相同的代码,没有c重定向,它工作得非常好。

此外,我尝试在使用fflush(stdin)执行scanf操作之前刷新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$ 
c gcc clang scanf
1个回答
3
投票

它接受输入,它只接受你告诉它接受输入的文件的输入。

STDIN有三个选项:

  • assignment:互动输入
  • assignment < input.txt:从文件中获取输入
  • command | assignment:从命令command(管道)的结果中获取输入

由于您使用的是第二种形式,因此您也无法进行交互式输入。它是一个输入源,只有一个。

© www.soinside.com 2019 - 2024. All rights reserved.