代码之家  ›  专栏  ›  技术社区  ›  cheesey

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

  •  1
  • cheesey  · 技术社区  · 6 年前

    出于某种原因,使用C重定向将输入传递到stdin后,scanf无法正常工作。 我在没有C重定向的情况下测试了相同的代码,它工作得非常好。

    另外,我在用scanf操作之前尝试刷新stdin FFLUH(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 回复  |  直到 6 年前
        1
  •  1
  •   tadman    6 年前

    它接受输入,它只接受来自您告诉它接受输入的文件的输入。

    对于stdin,您有三个选项:

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

    因为您使用的是第二个表单,所以不能同时接受交互式输入。它只有一个输入源和一个输入源。