C语言错误改正问题:error C2181: illegal else without matching if

具体如下:
#include<stdio.h>
#include<math.h>
main()
{int a,b,c;
printf("请输入方程系数a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
if
(b*b-4*a*c<0)
printf("该一元二次方程有复根");

else
{float x1,x2;
if
(b*b-4*a*c==0)
printf("该一元二次方程有一个实根");
x1=(float)(-b/(2*a));
printf("%f",x1);
else
printf("该一元二次方程有两个不相等实根");
x1=(float)(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(float)(-b-sqrt(b*b-4*a*c))/(2*a);
printf("%f%f",x1,x2);}
}

这个运行后有错误,错误类型我也百度了,if和else不对应,不知道咋加花括号 请高手指点下。

每个配对的if 和 else之间只允许有一条单语句或一条复合语句。所以加上{}就行了
#include<stdio.h>
#include<math.h>
main()
{int a,b,c;
printf("请输入方程系数a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
if(b*b-4*a*c<0)
printf("该一元二次方程有复根");
else
{float x1,x2;
if(b*b-4*a*c==0) //该if下加了{}括号,形成一条复合语句
{printf("该一元二次方程有一个实根");
x1=(float)(-b/(2*a));
printf("%f",x1);}
else //该else下也加了{}号,形成一条复合语句
{printf("该一元二次方程有两个不相等实根");
x1=(float)(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(float)(-b-sqrt(b*b-4*a*c))/(2*a);
printf("%f%f",x1,x2);}}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-05-05
if
(b*b-4*a*c==0)
{
printf("该一元二次方程有一个实根");
x1=(float)(-b/(2*a));
printf("%f",x1);
}
else
加上{}试试追问

嗯 你加的对着 当时试了好几处花括号位置 记得当时加花括号 加到了(b*b-4*a*c)的前面
另一个花括号位置和你一样 你为啥这样加

追答

if 语句如果不加{},只能控制其后的一条语句,其他的语句就和if没有关系了

第2个回答  2015-05-05
第二个if后面的三句用化花括号括起来
第二个else后面的四句用花括号括起来追问

嗯 你加的也对着 比另一位回答的多了花括号 不过也对 当时试了好几处花括号位置 这个我也试过 记得当时加前花括号 加到了(b*b-4*a*c)的前面
其它和你加的一样 这个为啥错了?

追答

哪里还错了,我这运行对了啊,下面是我改的代码, 你看看

#include<stdio.h>
#include<math.h>
main()
{
int a,b,c;
printf("请输入方程系数a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
if(b*b-4*a*c<0)
printf("该一元二次方程有复根");

else 
{
float x1,x2;
if(b*b-4*a*c==0)
{
printf("该一元二次方程有一个实根:\n");
x1=(float)(-b/(2*a));
printf("%f\n",x1);
}
else
{
printf("该一元二次方程有两个不相等实根:\n");
    x1=(float)(-b+sqrt(b*b-4*a*c))/(2*a);
    x2=(float)(-b-sqrt(b*b-4*a*c))/(2*a);
    printf("x1 = %f, x2 = %f\n",x1,x2);
}
}
}

追问

额 你看错我的意思了 你的没错 我是说我以前那个改法错着 想问你我那个改法为啥错了 现在知道了原因了 谢谢回答

#C语言中的问题# error C2181: illegal else without matching if
这个后面带分号了 因此这句就独立完成了一句 与下面你的else if 就没关系了··

#C语言中的问题# error C2181: illegal else without matching if
错误提示为:else与if不匹配 判断if(b*b-4*a*c>0)时多加一个分号“;”表示一个语句了,后面的else成独立的了 所以说else不匹配if

...error C2181: illegal else without matching if
else if(a>=1000){ a=a*0.75;printf("%f",a);} } 修改后,测试无语法错误 1、数字不能使用单引号括起来 2、if()else语句中,要注意使用大括号

...error C2181: illegal else without matching if 我到底错在哪...
你第三个else if 后面多了一个;把它删除即可

...error C2181: illegal else without matching if
if (a!=b);分号去掉就OK了

error C2181: illegal else without matching if
else { \/\/加括号 printf("error\\n");} \/\/加括号 } if后面如果只是只执行一句可以不加括号,然后跟着写else;但是你后面执行多句话,那么编译器会将你的代码看作为:if(b*b-4*a*c>=0){ d= sqrt(b*b-4*a*c);} x1= (-b+d)\/(2*a);x2= (-b-d)\/(2*a);else ......

...error C2181: illegal else without matching if
if(year%4==0&&year%100!=0||year%100==0);if在;的时候就已经结束了。所以下面的else没有相应的if匹配。建议修改为 if(year%4==0&&year%100!=0||year%100==0){printf("days=29"); }else { printf("days=28");}

...error C2181: illegal else without matching if 么意思? 谢谢_百度...
检查下你写的if~else语句,你的语句有问题!你是写的嵌套吧?

c语言老是出现error C2181: illegal else without matching if
if((aa[i] % 1000) < (aa[j] % 1000));\/\/如果aa[i]的后三位数小于aa[j]的后三位数 else if((aa[i] % 1000) == (aa[j] % 1000));\/\/如果aa[i]的后三位等于aa[j]后三位 if(aa[i] > aa[j]);\/\/如果aa[i]的值大于aa[j]的值 这三行分别在行尾多了一个分号。

...error C2181: illegal else without matching if这个错误,到底是什 ...
使得这条if语句与同它匹配的else语句之间多了一条语句:“max=abs(a[i]-a[j]);”。这样就不符合C语言语法了,所以编译器报错说:else没有与之对应的if(因为中间隔了一条语句)。即便if或else后只有一条语句,也用{}扩起来,是一个好的编程习惯。这样容易发现错误。

相似回答