下面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
岱鲁 说的对,我就不说了

为什么c语言中if和else不能嵌套使用?
2、出错原理:c语言里,有if不一定有else,但是有else一定要有相对应的if。3、解决方法:这种情况你往前推一下,所有的else能不能跟相应的if对应,很容易就找到了。4、良好习惯:虽然c语言不要求通过tab或者space来区分上下级关系,但是要养成良好书写习惯,比如说if后的程序段要空一个tab,这样出错的...

有关C语言中if-else的用法,这样为什么不行?
if ... else语句在C编程语言的语法:if(boolean_expression){ \/* statement(s) will execute if the boolean expression is true *\/}else{ \/* statement(s) will execute if the boolean expression is false *\/}如果布尔表达式的计算结果为true,则if块中的代码将被执行,否则else块的代码...

在c语言程序中if-else语句的else语句总是不执行是怎么回事
1、新建一个工程和文件,命名为Third和first.c , 然后书写好程序的模板结构。2、首先我们演示一个很不规范的代码写法,很多初学者容易写成这样,导致出现意想不到的运行结果。3、很多初学者就会不知所措,其实只要把代码按照正确的缩进方式书写,就可以很一目了然了。4、这样书写过之后,就很清楚了...

c语言。。为什么下面这个程序不执行if语句?
字符串末尾需要结束标记'\\0',因此字符串"rank"最少需要占用5个字节的空间。c和s应该至少定义为char[5]。

为什么C语言中的else总是无效?
其次,由于没有加括号,第一个if只能控制下一行的语句,即第二个if;第一个if无效,所以程序判定下一行的第二个if无效,而再往下一行的语句又受第二个if控制,所以它受到连锁反应,间接被无效了。下面的else与第二个if配对,第二个if无效就是else配对对象无效,else自然就跟着无效了。那么c=2就没有...

C语言程序没有匹配if的非法else
if那一行后面多了个分号;

在c语言程序中if-else语句的else语句总是不执行是怎么回事
那就是IF里面的满足了啊,IF条件满足就执行IF的,ELSE是IF条件不满足,另外可以用步进调试看看程序怎么判断的

求大神关于c语言if与else的的问题。。。程序很简单,就是不知道为什么有...
第二次没有执行if语句,直接执行的else语句,就会是这样的结果。至于你说没有达到执行else的条件,那只是你觉得,计算机在这方面不会出错的,这个问题的话,其实也很简单,你的if后面的判断条件,应该是t31与t30的差大于0.01就继续循环,而计算差值是会出现负值的,假如t31=100,t30=101,直观判断...

error C2181: 没有匹配 if 的非法 else C语言编程问题!!
但是我建议还是要加上{} 这样就会避免出现error C2181这样的错误 你这个错误是在第一个else if时出现的 因为你的代码有两句 而你没有加上{}导致了编译器认为continue语句是不属于else if语句块的 scanf函数我用vc6测试了下没有问题 头文件已经正确包含了 include<stdio.h> int main(){ float n=...

在c语言程序中if-else语句的else语句总是不执行是怎么回事?
第二个if开始依次改为 else if(n>999)else if(n>99)else if(n>9)else 表达式10000>n>999,即(10000>n)>999 无论n的值是多少表达式的值必然是假

相似回答