c 编程问题~~求救

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:32:57
#include "stdio.h"
main()
{
int a;
char b;
printf("please input integral:");
scanf("%d",&a);
printf("a=%d\n);
printf("please input character:");
scanf("%c",&b);
printf("b=%c\n);
}
执行结果:
如果输入整数,b不提示输入也没有值;
如果先输入字符,就会直接付给b,a不提示输入也无值。
例如:
输入 :7
显示please input integral:7
a=7
please input charater:c=
求达人指点一下为什么会这样?
重新编译成功,没有提示有错误啊,
还有为什么printf("b=%c\n); 是不能通过编译的?
谢谢!

首先,你程序考的有些"笔误",我想你能运行的话这个应该不是问题.
printf("a=%d\n);
应该是printf("a=%d\n",a);

至于你问的问题是这样的,我曾经遇到过,后来才搞清楚
如果你先输入整数,一定会打一个回车,这个回车也是一个字符,会被第二个scanf吸收.
如果你先输入字符,由于c语言中int和char可以通用,第一句scanf会把字符的ascii码赋值给a,之后的回车自动赋给b.
解决的方法可以在第二句scanf里改一下格式为:scanf("\n%c",&b);
用一个换行符跳过那个回车,再重新等待用户的输入.

sorry,第二个解释是有点问题的,原因是scanf("%d",&a); 不能接受一个字符的输入,那样系统会自动分配一个任意值给a,而你输入的字符保留在缓存,直接赋给了第二句的scanf.
解决的方法是对的,你可以试运行一下,第二句scanf改过后先输入数字再输入字符就正常了.至于先输入字符是不允许的.那样系统仍然会分配任意数给a.

你可能是没有重新编译就执行了,而且程序中有错误,printf("b=%c\n); 是不能通过编译的。

没有配对的双引号,会引起编译错误。