该程序如何停止输入?

时间:2013-11-27 10:47:00

标签: c linux

我正在处理C源代码并获得输入

 while(!feof(stdin)){
        fscanf(stdin, "%d ...

我无法理解的是如何让它停止输入并处理输入? Ctr + Z只是杀死了整个过程,我试着在没有输入的情况下输入一堆,但它不起作用。

1 个答案:

答案 0 :(得分:7)

Linux上的EOF(通常为define,值为-1)指示符将匹配文本文件的 CTRL + D (ASCII代码4)。它的通用性足以与二进制文件和文本文件一起使用,也可以在不同的环境中使用(例如,对于DOS / Windows上的文本文件,它将匹配 CTRL + Z )。

在你的情况下,当用户输入 CTRL + D 作为输入时,循环将退出,因为输入流将到达其末尾(然后feof()将返回非零)。

要查看此方法的缺点(not so obvious behavior),只需尝试输入一些文本然后printf输出(使用各种输入,终止于行的开头或中间)。有关详细信息,另请参阅this post

更好(最不惊讶)的实现可以避免fscanf并依赖fgets返回值(例如)。将其行为与此进行比较:

char buffer[80];
while (fgets(buffer, sizeof(buffer), stdin) != NULL) {
    // ...
}