职场矛盾的格言:C语言问题,输入两个字并进行显示。这个不明白,望高手解释。

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 01:40:39
main()
{
char a,b;
scanf("%c%c\n",&a,&b);/*第一行*/
printf("%c%c\n",&a,&b);
scanf("%c %c",&a,&b);/*第二行*/
printf("%c%c\n",a,b);
}
输出的结果很怪,第行输入“a空格b”输出的结果是“a”。输入的“b”不见了,然后执行到第二行的时候输入“c空格d”。输出是“bc”。
如果第一行没有加空格的话,完全正常。
main()
{
char a,b;
scanf("%c%c\n",&a,&b);/*第一行*/
printf("%c%c\n",a,b);
scanf("%c %c",&a,&b);/*第二行*/
printf("%c%c\n",a,b);
}
输出的结果很怪,第行输入“a空格b”输出的结果是“a”。输入的“b”不见了,然后执行到第二行的时候输入“c空格d”。输出是“bc”。
如果第一行没有加空格的话,完全正常。

这是因为
SCANF 是一个要让格式输入的

scanf("%c%c\n",&a,&b);
就必需 中间没有空格的
如果输入时有了
那么 当你输入a_b 时
数据先保存再缓冲区 当你按回车的时候 a_ 就会显示出来的 你就会发现 b 不见了
如果是
scanf("%c %c",&a,&b);
中间有空格时
就会时正常显示

main()
{
char a,b;
scanf("%c %c\n",&a,&b);/*第一行*/ //加上空格就好了
printf("%c%c\n",&a,&b);
scanf("%c %c",&a,&b);/*第二行*/
printf("%c%c\n",a,b);
}

这个问题与C语言的输入缓存有关。
前者输入“a b”,将'a'给变量a,' '给变量b。
结果'b'进入缓存。
待进入下一个scanf时,自动先从缓存中读数据,将'b'给变量a,接着将输入的'c'给b,不信你可以再用一个scanf读字符试试,缓存中还有2个字符。

%c%c中间没有空格,而你在输入a的后面加了一个空格,这时候你真正输入的是一个a和一个空格.所以显示a.

空格不能输的
把&B当成空格给输进去了

scanf 对字符不能识别。它把空格当作第二个输入的字母了。