C 输入输出getchar()与putchar()

getchar()putchar()其实感觉也挺神奇,因为这货是读/写一个字符,书的引言就说C语言没有处理整个数组或字符串的操作,暂时也只看到这个,感觉还挺好玩的。

书上给的代码是:

#include <stdio.h>

main(void)
{
    int c;

    c = getchar();

    while (c != EOF) {
        putchar(c);
        c = getchar();
    }

}

运行一下,会发现我输入什么会输出什么,实际上,是一个个字符来读取,而不是字符串的形式,我脑补了一下,如果计算机处理速度足够慢,大概就能看到一个个字符慢慢出现的景象了。

但是现在足够快了,当时还不是很理解,于是尝试了注释掉代码和换位置。

#include <stdio.h>

main(void)
{
    int c;

    c = getchar();

    while (c != EOF) {
        putchar(c);
        //c = getchar();
    }

}

getchar()在循环中读取下一个字符,把它注释掉,就发现一直不停输出你输入的第一个字符,慢慢增加,可以看出一个个输出的效果了。

负责移动的是getchar(),而putchar()其实只负责:输出目前getchar()所在的位置(读入的字符)而已,所以改成:

#include <stdio.h>

main(void)
{
    int c;

    c = getchar();
    putchar(c);
    putchar(c);
    c = getchar();
    putchar(c);
/*
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
*/
}

会发现,如果输入是25427785输出是225,这是因为putchar()并没有移动位置(读入下一个字符)。

然后产生了一个新的困惑,为什么第一次getchar()会提示输入,后来就不会了(直到全部输出完)。

实际上每个getchar()还有输入的效果,但当时我们输入的是字符串,可以看成把它丢到了缓冲区:

getchar() 会先从缓冲区里取一个字符,如果缓冲区里没有数据,才要求你输入

此外scanf()getchar()能交替使用printf()putchar()能交替使用。

另外,其实这段程序并不会跳出循环,这是因为没有EOF,必须要手动输入:Win中是CTRL+Z,然后Enter,可见什么是EOF

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 知识, 代码段, 语法

仅有一条评论

  1. mark

添加新评论