这个问题在这里已有答案:
我是编码的新手,我正在通过一本名为“The C Programming Language - 2nd Edition - Ritchie Kernighan”的书来学习,并且有以下代码:
#include<stdio.h>
#include<stdlib.h>
int main(){
int c,nl;
nl =0;
while((c=getchar())!=EOF)
if(c == '\n')
++nl;
printf("%d\n",nl);
return 0;
}
在CodeBlocks中键入代码后,我运行它,当我输入一个单词并按下输入时没有任何反应。这个词没有计算和打印。我是所有这一切的新手,但如果有人有想法随时分享它。非常感谢你 !
问题是你从来没有读过EOF
(文件结束);这是来自控制台(您键入的位置)的输入数据的结尾。
你键入的所有内容都是字母,数字,特殊字符或换行符,但绝不是EOF
。
要生成EOF
,您需要输入一个特殊的控制键组合。在Windows上,这是Ctrl+Z
,在UNIX / Linux / macOS上,这是Ctrl+D
。
你正在阅读的这本书很棒,由C的两位创作者撰写。这是我的第一本编程书籍之一,我仍然拥有它;都破旧了。
小建议:始终将代码块放在{ }
中以避免错误并创建更多视觉清晰度,一致地使用空格,并添加空行。您的代码如下所示:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int c, nl;
nl = 0;
while ((c = getchar()) != EOF)
{
if (c == '\n')
{
++nl;
}
}
printf("%d\n", nl);
return 0;
}
它为什么要停止?你的期望是错误的。 getchar()
将继续获得角色,直到遇到EOF
。
getchar
?对于Windows,Ctrl + Z将完成这一操作。然后按Enter键。 对于Unix或Linux系统,它将是Ctrl + D.
EOF
要获得更具响应性的输出,您可以添加此行,这将告诉您找到的\n
的累积总和。
if(c == '\n'){
++nl;
printf("Till now %d newline found",nl);
fflush(stdout);
}
当您按Enter键时,上面提供的代码段将为您提供一些输出。但问题是,直到你输入EOF
,它将继续等待越来越多的输入。这也是第一种情况发生的情况。因此,您必须按Ctrl + Z并按Enter键。这将打破循环。您将看到最终输出 - 行数。