我正在学习“C 编程语言”(K&R),并进行了一项练习。练习是打印直到 EOF 之前的空格、制表符和换行符的数量。太好了,这行得通。但是,我开始变得聪明,并添加了您在下面看到的 printf(),实际上是“空格”或“制表符”或“换行符”。它应该在我输入时打印出来,但是,while 循环似乎只在我按 Enter 时运行。
编码:
#include <stdio.h>
int main(int argc, const char * argv[])
{
int c, nb, nt, nl;
nb = nt = nl = 0;
while ((c = getchar()) != EOF) {
if (c == ' ') {
nb += 1;
printf("Space\n");
}
if (c == '\t') {
nt += 1;
printf("Tab\n");
}
if (c == '\n') {
nl += 1;
printf("New Line\n");
}
}
printf("%d spaces, %d tabs, %d newlines",nb,nt,nl);
return 0;
}
输出:
a b
Space
New Line
c d e
Space
Space
New Line
f g
Tab
New Line
3 spaces, 1 tabs, 3 newlines
我期望看到的是更像这样的东西:
a Spaceb
New Line
c Spaced Spacee
New Line
f tabg
New Line
3 spaces, 1 tabs, 3 newlines
那么,为什么我得到的是我得到的,而不是我所期望的?
而且,是的,如果我真的很关心,我会用“空格[s]”、“制表符[s]”和“换行符[s]”复数而不是基于值,但这只是一个练习. ;)