繁体   English   中英

getchar()和putchar()

[英]getchar() and putchar()

在示例中:

#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 */
}

不在哪里,这段代码只清空输入并写入在刷新之前剩下的多少个caracters。

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

我们来看看您的代码:

#include <stdio.h>

到现在为止还挺好...

main()
{
  1. main()函数总是返回一个int 总是。
  2. 声明没有返回类型的函数是不好的形式,因为它默认为int ,但人们在阅读代码时不记得这么容易。

继续 ...

long nc;

nc = 0;

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

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

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

  1. getchar函数从标准输入返回一个int
  2. 然后EOF值与EOF进行比较。
  3. 如果标准输入的int值不是EOF ,则变量nc递增。

因此,要退出while循环,必须从标准输入生成EOF。

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

风格 :我建议在每个while语句后使用'{'和'}'。 这是一个安全的习惯。

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

上面的语句是打印(显示) nc的值。 nc的值表示从标准输入读取的字符数。 这种说法显示从标准输入任何字符。

}

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

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

当putchar进入时,putchar将char放入缓冲区,然后它会将行字输出带到屏幕上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM