【发布时间】:2018-03-10 06:01:11
【问题描述】:
我正在学习 C 语言书中的练习。我在他介绍循环的第一章。在这段代码中:
#include <stdio.h>
/* copy input to output; 1st version */
int main() {
int c, n1;
n1 = 0;
while ((c = getchar()) != EOF) {
if (c == '\n') {
++n1;
}
printf("%d\n", n1);
}
}
在这里我计算行数。当我只是按 Enter 而不输入任何其他内容时,我得到了正确的行数,但是当我输入一个字符然后按 Enter 键时,循环运行两次,而第二次不要求输入。我得到两个输出。 这是输出的样子:
// I only hit enter
1
// I only hit enter
2
// I only hit enter
3
g // I put char 'g' then hit enter
3
4
3 和 4 同时打印。为什么在循环已经迭代之后打印 4 ?我以为循环会重新启动并在打印 4 之前询问我的输入。
【问题讨论】:
-
请注意,计数器仅在换行符处递增,但收集的每个字符都是循环迭代
-
循环在接收到输入时打印 n1 并在输入为换行时将 1 添加到 n1。它为 g 打印 n1,然后向其添加 1 并为换行打印 n1。
-
除非你真的应该为每个字符在一行上打印一个数字(在一行上写一篇文章,然后看着数字在屏幕上滚动),否则
printf()不恰当地放在里面循环而不是在它之后。如果您指的是 K&R (Kernighan & Ritchie) “The C Programming Language”,那么您已经抄错了代码。
标签: c while-loop