【发布时间】:2013-10-15 18:24:41
【问题描述】:
我用于计算输入行数的代码似乎有效。这里是:
#include <stdio.h>
int main()
{
int counter = 0;
while(getchar() != EOF)
{
if(getchar() == '\n')
{
counter += 1;
}
}
printf("Counter: %d", counter);
return 0;
}
但我的问题是,为什么在 K&R 的书中,当仅在 while 循环条件下测试为真或假时,他们将 getchar 返回值存储在变量中?我认为没有理由这样做。
K&R 的版本:
#include <stdio.h>
main()
{
int c, nl;
nl = 0;
while ((c = getchar()) != EOF)
if (c == '\n') ++nl;
printf("%d\n", nl);
}
注意“int c”是存储getchar的返回值。
【问题讨论】:
-
如果文件中的第一个字符是换行符会怎样?如果你连续有两个换行符怎么办?您对 getchar() 的第一次调用会咀嚼一个 char,您无法知道究竟咀嚼了什么。
-
@GeorgeMitchell 对,我明白了,谢谢 George。
-
认为
getchar()的每个调用都读取一个字符,读取一个你许多人继续\n的行:尝试使用输入文件each $'a\n\n\n\nb' > inputfile
标签: c