0

我有一个需要从标准输入读取输入的基本 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);
 }
4

1 回答 1

0

阅读文档scanf,特别是关于返回值的部分,摘录如下:

返回值

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

您遇到的问题是,一旦文件用完数据,程序的标准输入不会恢复到控制终端,它会停留在空文件的末尾。您的 scanf 呼叫静默失败,保留command未修改的内容。如果您希望能够从两者中读取,则需要找到另一种处理方式。

您的 shell 可能支持此功能。

于 2012-09-06T19:02:50.463 回答