金色晨晓新人7:见鬼了??

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/20 16:36:09
为什么??
#include"stdio.h"
main()
{ int i;
char m;

printf("输入 i:");
scanf("%d",&i);
printf(" %d\n",i);
/*********************///这样有错~无法输入m他就自动结束了啊~
//若把下面搬到上面 即要求先输入m的话就没错了?? WHY??T0T
printf("输入 m:");
scanf("%c",&m);
printf(" %c\n",m);

}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~怎么会这样啊?/
是我装的C++有错误么???

在接收数字的scanf语句的后边加上一个getchar(); 或者在scanf("%c",&m); 的前面加也行。

因为scanf语句在接受数字的时候不接受最后一个回车,所以当你执行了一个接受数字的scnaf之后,键盘缓冲区还有一个回车,因此当你再执行下一个接收字符的scanf语句后,它会先接受原来留下的那个回车,所以你必须加上一个getchar();“吸收”掉上次留下的回车。

改为这样试试:#include"stdio.h"
main()
{ int i;
char m;

printf("输入 i:");
scanf("%d",&i);
printf("输入 m:");
scanf("%c",&m);
printf(" %c\n",m);
printf(" %d\n",i);
}

scanf("\n%d",&i);
scanf("\n%c",&m);

在VC++ 6.0下运行通过

不是 是因为你输入一个数字后,要打回车确认,这样回车就被认做是下一个%c的输入了,就是m接收了回车,一般这样可以用getchar()函数把那个回车吃掉

xyphoenix和chief_lfw的回答都是对的