马丁.麦凯恩:一个有关scanf()函数的问题?

来源:百度文库 编辑:中科新闻网 时间:2024/05/06 13:07:12
程序:void main() {int x; char m; printf("Enter a num:"); scanf("%d,&x"); printf("Enter a alpher:"); scanf("%c",&m); printf("%d+%c",x,m);}为什么在编译运行后,输入数字和字母时,总是无法输入字母?把第二个scanf()改成getche()函数就可以,但是我想知道为什么用scanf()不行,谢谢指教!!
那位什么连续输入两个数值类型的数,也是这样分开写(两个printf,两个scanf)就没有任何问题呢?

当你按下一个数字或字母时
比如A或1
输入的是A+回车或1+回车
把A或1传给X后
缓存区里还保存着回车的字符
所以当下一个scanf时就把回车赋给了m

这是因为,你输入数字是会按回车,回车就进入了缓冲区,再读取字符时就直接把回车读入了。解决方法是将输入的回车先读出来,再输入字符。
void main()
{
int x;
char m,n;
printf("Enter a num:");
scanf("%d",&x);
scanf("%c",&n);
printf("Enter a alpher:");
scanf("%c",&m);
printf("%d+%c",x,m);
}

scanf是从标准输入流读取的数据
getche是直接从键盘接受一个字符并回显

...上面说的应该也对.