我正在处理C源代码并获得输入
while(!feof(stdin)){
fscanf(stdin, "%d ...
我无法理解的是如何让它停止输入并处理输入? Ctr + Z只是杀死了整个过程,我试着在没有输入的情况下输入一堆,但它不起作用。
答案 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) {
// ...
}