getchar() 和 putchar()
-
25-09-2019 - |
题
在示例中:
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
我不太明白。putchar() 会把字符放出来,但是为什么在 EOF 之后它就把所有字符都放出来了,它在哪里记住所有这些字符呢?谢谢。
解决方案
这就是所谓的缓冲并它是由操作系统来完成。通常它是行缓冲它只是保存你把它在内存中的每一个字符,然后将其全部写在遇到一个换行符的文件。这节省了资源,因为文件操作比其他操作更多的时间。因此,不是每一个字符做输出,它等待一串字符缓冲区中收集和一气呵成写出它们所有。
这只是由操作系统,你,程序员,也不需要操心做了巧妙回旋。而就在这一个接一个地抛出你的角色,让操作系统处理剩下的以自己的方式。
其他提示
[这不是一个答案,但你不能把代码中的注释的
我认为你的意思是这样的:
#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 */
}
没有其中,该代码仅清空输入和写入的字符是如何刷新之前离开。
这是要确保是残留在输入文件中没有字符(STDIN)
让我们检查一下您的代码:
#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
在您发布的示例中(我将其复制到此答案中)。
的putchar把炭入缓冲区,当涉及一个输入,那么它会带来线的字输出到屏幕上。