下面c语言程序不能进行if-else语句的原因

#include<stdio.h>
float ser(float,float);
float par(float,float);
main()
{
float x1,x2,y1,y2;
char x,y;
do
{
printf("x1=");
scanf("%f",&x1);
printf("x2=");
scanf("%f",&x2);
printf("s or p");
scanf("%c",&x);
if(x=='s')
{
y1=ser(x1,x2);
printf("%f",y1);
}
else
{
y2=par(x1,x2);
printf("%f",y2);
}
printf("\n");
printf("Again y/n");
scanf("%c",&y);
}
while(y=='y');
printf("Exit!!");
getchar();
getchar();
}
float ser(float a,float b)
{
float c;
c=a+b;
return(c);
}
float par(float d,float e)
{
float f;
f=d*e/(d+e);
return(f);
}

结果,不能读入变量x,只进行了else部分的(如图,在s or p 后面直接跟else执行后的结果了),求详解,答得好再加分!

第1个回答  2010-12-01
X是float类型,不能与字符型进行比较,或者说:if(此处的内容永远为假),所以不会运行if后的代码;else则不然,if不满足,一定会运行else,所以else内容一直被运行。
第2个回答  2010-12-01
scanf("%c",&x);
这句不能正常接收字符,什么原因呢?我们用printf("c=%d\n",c);将C用int表示出来,启用printf("c=%d\n",c);这一句,看看scanf()函数赋给C到底是什么,结果是c=10 ,ASCII值为10是什么?换行即\n.
在输入了x2后,我们输入了一个回车键,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了x.
解决办法:在scanf("%c",&x);之前加个fflush(stdin);
清空缓存本回答被提问者采纳
第3个回答  2010-12-02
main()
{
float x1,x2,y1,y2;
char x,y;
do
{
printf("x1=");
scanf("%f",&x1);
printf("x2=");
scanf("%f",&x2);
getchar(); 这里加上一个getchar()才能把你数据从缓冲区送到内存时输入的回车键 接受 不然就会被下一个scanf()接受 所以才导致了 x的值就是回车
printf("s or p");
scanf("%c",&x);
可以在这里输出X的值 你就发现会换行 如果你不是接受的字符而是数字就不会出现这种情况 注意使用 gets(str)的时候同样会出现这种情况 str指针所指向的内存就是回车键
希望可以帮到你
第4个回答  2010-12-02
岱鲁 的回答是正解
第5个回答  2010-12-02
岱鲁 说的对,我就不说了
相似回答