C stdin无限地读取文件

时间:2012-09-06 18:55:08

标签: c stdin infinite

我有一个需要从stdin读取输入的基本C程序。 首先,它使用

从输入文件中读取
./Program <input

然后它循环读取,直到没有更多

while(scanf("%s",command)!=EOF){
    printf("%s\n",command);
}

之后我需要再次从键盘读取,但它继续无限地垃圾邮件从我的输入文件读取最后一行,不让我使用我的键盘输入。

 while(1){

 scanf("%s",command);
 if(!strcasecmp(command,"exit"))
  exitProg();
 else if(!strcasecmp(command,"help"))
  helpMess();
 else
  printf("Command \"%s\" not recognized, use command \"help\" for a list.\n",command);
 }

1 个答案:

答案 0 :(得分:0)

阅读documentation for scanf,特别是有关返回值的部分,摘录如下:

  

返回值

     

成功时,该函数返回成功读取的项目数。如果发生匹配故障,此计数可以匹配预期的读数或更少,甚至为零。   如果在成功读取任何数据之前输入失败,则返回EOF。

您遇到的问题是,一旦文件耗尽数据,程序的标准输入不会恢复到控制终端,它将保留在空文件的末尾。您的scanf调用无声地失败,使command的内容保持不变。如果你想从两者中读取,你需要找到另一种方法来处理它。

您的shell可能支持此功能。