我正在引用 K 和 R 书来学习 C; 它是关于字数统计程序中带有 EOF 的 while 循环,书中给出的程序运行良好,但我想知道它如何在一次输入后停止接受输入并给出行数、字数和字符数的输出。在这个程序之前,我常常在使用带有 !=EOF 的 while 循环的任何地方按 Ctrl + Z 后按 Enter 来获取输出。
请帮助我理解这个程序到底发生了什么来打破循环。
附加代码和输出 -
#include<stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
/* count lines, words, and charaters in input */
main()
{
int c, n1, nw, nc, state; /* n1 for line count, nw for word count, & nc for character count */
state = OUT;
n1 = nw = nc = 0;
while ( ( c = getchar() ) != EOF ){
++nc;
if ( c == '\n')
++n1;
if ( c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if ( state == OUT) {
state = IN;
++nw;
}
printf ( "%d %d %d \n", n1, nw, nc);
}
}
输出-
最佳答案
循环尚未结束。您可以通过输入更多字符并按 Enter 来验证这一点。你会看到更多的输出。这是因为这个printf
:
printf ( "%d %d %d \n", n1, nw, nc);
在循环中。它将在循环的每次迭代中执行。
<小时/>如果您希望在使用 CTRL+Z 和 Enter 发送 EOF
后看到输出,将 printf
移到循环之外。
关于c - C 字数统计程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645935/