C 输入输出getchar()与putchar()
getchar()
与putchar()
其实感觉也挺神奇,因为这货是读/写一个字符,书的引言就说C语言没有处理整个数组或字符串的操作,暂时也只看到这个,感觉还挺好玩的。
书上给的代码是:
1#include <stdio.h>
2
3main(void)
4{
5 int c;
6
7 c = getchar();
8
9 while (c != EOF) {
10 putchar(c);
11 c = getchar();
12 }
13
14}
15
运行一下,会发现我输入什么会输出什么,实际上,是一个个字符来读取,而不是字符串的形式,我脑补了一下,如果计算机处理速度足够慢,大概就能看到一个个字符慢慢出现的景象了。
但是现在足够快了,当时还不是很理解,于是尝试了注释掉代码和换位置。
1#include <stdio.h>
2
3main(void)
4{
5 int c;
6
7 c = getchar();
8
9 while (c != EOF) {
10 putchar(c);
11 //c = getchar();
12 }
13
14}
15
getchar()
在循环中读取下一个字符,把它注释掉,就发现一直不停输出你输入的第一个字符,慢慢增加,可以看出一个个输出的效果了。
负责移动的是getchar()
,而putchar()
其实只负责:输出目前getchar()
所在的位置(读入的字符)而已,所以改成:
1#include <stdio.h>
2
3main(void)
4{
5 int c;
6
7 c = getchar();
8 putchar(c);
9 putchar(c);
10 c = getchar();
11 putchar(c);
12/*
13 while (c != EOF) {
14 putchar(c);
15 c = getchar();
16 }
17*/
18}
19
会发现,如果输入是25427785
输出是225
,这是因为putchar()
并没有移动位置(读入下一个字符)。
然后产生了一个新的困惑,为什么第一次getchar()
会提示输入,后来就不会了(直到全部输出完)。
实际上每个getchar()
还有输入的效果,但当时我们输入的是字符串,可以看成把它丢到了缓冲区:
getchar() 会先从缓冲区里取一个字符,如果缓冲区里没有数据,才要求你输入
此外scanf()
与getchar()
能交替使用printf()
与putchar()
能交替使用。
另外,其实这段程序并不会跳出循环,这是因为没有EOF,必须要手动输入:Win中是CTRL+Z
,然后Enter,可见什么是EOF
评论 (1)
mark