:
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
我不太明白。 putchar()会把角色放出来,但为什么在EOF之后它会把所有的角色都放出来,它在哪里记住所有这些角色?感谢。
答案 0 :(得分:8)
它被称为缓冲,它由操作系统完成。通常它会进行行缓冲,它只保存你在内存中放入的每个字符,然后在遇到换行符时将其全部写入文件。这节省了资源,因为文件操作比其他操作花费更多时间。因此,它不是对每个字符进行输出,而是等待在缓冲区中收集一堆字符,并将它们一次性写出来。
这只是操作系统所做的一个聪明的操作,你,程序员,你不必担心。只需将你的角色逐个扔到它上面,让操作系统以自己的方式处理其余部分。
答案 1 :(得分:2)
[这不是答案,但你不能在评论中加入代码]
我认为你的意思是这样的:
#include <stdio.h>
main()
{
long nc;
nc = 0;
char c;
while ((c = getchar()) != EOF)
{
putchar(c); /* prints one char */
++nc;
}
printf("%ld\n", nc); /* prints the number of characters read */
}
答案 2 :(得分:1)
否则,此代码仅清空输入并写入刷新前剩余的字符数。
这是为了确保输入文件(stdin)中没有剩余字符
答案 3 :(得分:1)
让我们回顾一下您的代码:
#include <stdio.h>
到目前为止一直很好......
main()
{
main()
函数始终返回
int
。总是。int
,但人们不记得了
阅读代码时这很容易。继续......
long nc;
nc = 0;
良好的形式。变量在使用之前已初始化。
while (getchar() != EOF)
++nc;
这有点复杂。但是一步一步。
getchar
函数返回一个
来自标准输入的int
。EOF
。int
值来自标准
输入不是变量EOF
nc
递增。因此,要退出while
循环,必须从标准输入生成EOF。
注意:从标准输入读取的值均未已保存。评估表达式后,将丢弃每个值。
样式:我建议在每个while
语句后使用“{”和“}”。这是安全的习惯。
printf("%ld\n", nc);
上述声明正在nc
中打印(显示)该值。 nc
中的值表示从标准输入读取的字符数。此声明不显示标准输入中的任何字符。
}
最后,main
程序必须向操作系统返回一个值。两个可移植值为EXIT_SUCCESS
和EXIT_FAILURE
,在stdlib.h
中定义。指定其中一个值也是一个好习惯。
顺便说一句,你发布的例子中没有putchar
(我已将其复制到此答案中)。
答案 4 :(得分:1)
putchar在输入时将char放入缓冲区,然后将线字输出到屏幕。