在示例中:

#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()
{
  1. main() 功能总是返回 int. 。总是。
  2. 声明无返回类型的声明功能是差的形式,因为它默认为int, ,但是人们在阅读代码时并不记得这一点。

继续 ...

long nc;

nc = 0;

好形式。变量在使用之前会被初始化。

while (getchar() != EOF)
    ++nc;

这有点复杂。但一步一步来。

  1. getchar 函数返回一个int 来自标准输入。
  2. 然后将该值与EOF.
  3. 如果 int 来自标准输入的价值不是 EOF, ,变量nc 是递增的。

所以要退出 while 循环中,必须从标准输入生成 EOF。

笔记: 从标准输入读取的值都不是 已保存. 。计算表达式后,每个值都将被丢弃。

风格:我建议在每个之后使用“{”和“}” while 陈述。这是一个 安全的 习惯去养成。

printf("%ld\n", nc);

上面的语句打印(显示)中的值 nc. 。中的值 nc 表示从标准输入读取的字符数。这个声明确实 不是 显示标准输入中的任何字符。

}

最后, main 程序必须向操作系统返回一个值。两个可移植值是 EXIT_SUCCESSEXIT_FAILURE, ,其定义在 stdlib.h. 。指定这些值之一也是一个好习惯。

顺便说一句,没有 putchar 在您发布的示例中(我将其复制到此答案中)。

的putchar把炭入缓冲区,当涉及一个输入,那么它会带来线的字输出到屏幕上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top