我是编码的新手,我正在通过一本名为“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中键入代码后,我运行它,当我输入一个单词并按下输入时没有任何反应。这个词没有计算和打印。我是所有这一切的新手,但如果有人有想法随时分享它。非常感谢你!
答案 0 :(得分:3)
问题是你从未阅读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;
}
答案 1 :(得分:1)
为什么要停止?你的期望是错误的。 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 。这将打破循环。您将看到最终输出 - 行数。