6

在示例中:

#include <stdio.h>

main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}

我不太明白。putchar() 会将字符输出,但为什么在 EOF 之后它会输出所有字符,它在哪里记住所有这些字符?谢谢。

4

4 回答 4

8

这称为缓冲,由操作系统完成。通常它会进行行缓冲,它只是将您放入的每个字符保存在内存中,然后在遇到换行符时将其全部写入文件。这节省了资源,因为文件操作比其他操作花费更多的时间。因此,它不是对每个字符进行输出,而是等待一堆字符收集到缓冲区中,然后一次性将它们全部写出来。

这只是操作系统所做的一个聪明的操作,你,程序员,不需要担心。只需将您的角色一个一个地扔给它,然后让操作系统以自己的方式处理其余部分。

于 2010-02-02T23:56:33.820 回答
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 */
}
于 2010-02-03T03:18:47.510 回答
1

没有,此代码仅清空输入并写入刷新前剩余的字符数。

这是为了确保输入文件(stdin)中没有剩余字符

于 2010-02-02T23:53:09.103 回答
1

putchar 输入时将字符放入缓冲区,然后将行字输出带到屏幕上。

于 2011-06-12T11:58:46.130 回答