我尝试了很多此代码的变体,包括使用scanf
函数,每次增加2点而不是1点。这是代码:
#include <stdio.h>
int main(void)
{
double nc;
for(nc = 0; getchar() != EOF; ++nc)
printf("%.0f\n", nc);
}
这是我得到的输出。我使用的输入是qwerty,输出数字是0-11而不是0-5,如预期的那样。
q
0
1
w
2
3
e
4
5
r
6
7
t
8
9
y
10
11
我有一个想法是当我按下回车时,它被计为getchar
的值以及我输入的字符,这会导致循环运行两次迭代。任何人都可以进一步解释这个概念,或者为我提供有关它的更多信息的链接吗?
答案 0 :(得分:5)
上一个getchar
的尾随换行符被视为下一个getchar
的输入
所以使用,
for(nc = 0; getchar() != EOF; ++nc)
{
printf("%.0f\n", nc);
getchar(); //"eat" the trailing newline
}