c语言简单程序。有什么错误啊。。。 #include<stdio.h> int main() {i

c语言简单程序。有什么错误啊。。。
#include<stdio.h>
int main()
{int i;
char a,b;
for (i=1;i<=2;i++)
{scanf("%c %c",&a,&b);
printf("%c %c\n",a,b);}

return 0;
}

这个程序没错,运行结果也是合情合理的,只不过不是你预期的,那是因为你没有理解输入输出流的概念,重点是这个流的含义,以及没有理解某些特殊字符,比如回车和换行。

你这个程序2次循环,每一次循环输入两个字符,然后分别打印2个字符。
但是你忽略了回车,你每一次输入2个字符之后,要按一下回车字符,而scanf读取2个字符,那么按下的回车并没有被读取,直到下一次循环时回车才会被读取。
所以第二个循环的时候,假如你输入了 x y 回车。 那么实际上a和b存入的值是 a = 回车 b = ‘x'。

注解:
键盘输入的任何数据,都按顺序一个一个排好队等待程序读取,这个队就是输入流。你按下了,如果程序没有读取,则数据一直在那里等待。 你输入 “12回车” 输入流的数据如下

’1‘,’2‘, ’\r‘ 。。
所以'\r'会干扰你的下一次循环。scanf 参数如果是 %c 表示一次从输入流取一个字符。

回车和换行都是特殊字符,回车 = ’\r‘ 换行 = '\n' .

改一下程序实现你要的效果,如下。

#include<stdio.h>
int main()
{
int i;
char a,b,n;
for (i=1;i<=2;i++)
{
scanf("%c%c%c",&a,&b,&n);
printf("a=%c,b=%c,enter=0x%X\n",a,b,n);
}
printf("enter any key to exit !!\n");
getchar();
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-14
看起来没错误,怎么了?只是输入是要输入1空格2,程序才能正确显示
第2个回答  2014-11-14
输出语句有问题 %c改成%s
第3个回答  2014-11-14
报什么错误了追问

第二次输出就不对了。。

追答

在scanf  和 printf 中间加个getchar()

相似回答