getchar()和putchar()

时间:2010-02-02 23:46:19

标签: c programming-languages getchar putchar

示例中的

#include <stdio.h>

main()
{
    long nc;

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

我不太明白。 putchar()会把角色放出来,但为什么在EOF之后它会把所有的角色都放出来,它在哪里记住所有这些角色?感谢。

5 个答案:

答案 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()
{
  1. main()函数始终返回 int。总是。
  2. 无需返回即可声明函数 类型是糟糕的形式,因为它默认为 int,但人们不记得了 阅读代码时这很容易。
  3. 继续......

    long nc;
    
    nc = 0;
    

    良好的形式。变量在使用之前已初始化。

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

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

    1. getchar函数返回一个 来自标准输入的int
    2. 然后将该值与之比较 EOF
    3. 如果int值来自标准 输入不是变量EOF nc递增。
    4. 因此,要退出while循环,必须从标准输入生成EOF。

      注意:从标准输入读取的值均未已保存。评估表达式后,将丢弃每个值。

      样式:我建议在每个while语句后使用“{”和“}”。这是安全的习惯。

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

      上述声明正在nc中打印(显示)该值。 nc中的值表示从标准输入读取的字符数。此声明显示标准输入中的任何字符。

      }
      

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

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

答案 4 :(得分:1)

putchar在输入时将char放入缓冲区,然后将线字输出到屏幕。