程序设计字符读入缓存区
A. 4.编程序:用getchar函数读入两个字符给c1,c2,然后分别用putchar和printf函数
#include
int
main()
{char
c1,c2;
c1=getchar();
putchar(c1);
scanf("%c",&c2);
printf("%c\n",c2);
return
0;
}
我们平时从键盘输入的字符都会存到缓存区里面,包括回车字符,getchar是从缓存区读入一个字符,用法是ch=getchar();
scanf并不针对于单个的字符处理,还可以读入数据和字符串,且scanf("%c",&ch)等价于ch=getchar();
至于putchar(ch)则等价于printf("%c",ch);功能是输出一个字符,要输出的字符变量写在括号内,如果要输出的是字符常量比如说感叹号则要这样:putchar('!');或printf("!");或printf("%c",'!');都相同。
B. 关于C语言的问题~ C语言程序设计(第四版)里说,在用键盘输入信息时,这些字符先暂存在键盘的缓冲
用来接受回车的是ch, 它是一个变量不是数组, 而用来保存文件名的是一个字符数组.
C语言几乎所有输入的函数都是先检查输入缓冲区是否为空, 如果空, 就让键盘输入, 输入的字符如果是回车符, 就结束输入, 然后输入的数据保存到输入缓冲区(就包括那个回车符), 最后再从缓冲区中读数据, 其中如果遇到非法字符, 结束读取, 返回EOF. 如果遇到空白符(回车, 空格)就表示这个数据的结束.
例如:scanf("%d", &i);scanf("%d", &i);
先是输入, 如果输入了123\n
那么, scanf在读取123的时候, 是正常的, 然后读取到\n, 它是空白符, 于是就结束输入, 而这个空白符是没会被删除的, 它还在输入缓冲区里.
然后后面还有一个要输入的, 因为输入缓冲区不为区, 所以直接读取数据, 但是第一个读到的数据就是空白符, 而后面也没有数据了, 所以返回EOF. 这样就会导致输入错误.
所以一般来说scanf前面都会加一个空格如: scanf(" %d", &i);这样那个空格就会和上一次输入留下的回车符抵消.
