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
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。
mark