C语言的问题,高手解答一下,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/05 12:00:47
#include <stdio.h>
main()
{
int a=2,b=3,c=1;
if(a>b)
if(a>c)
printf("%d\n",a);
else
printf("%d\n",b);
printf("over");
getch();
}
为什么这个程序编译的结果为:over
而不是:3
over

详细说明一下!谢谢!

第一个if条件是a>b,显然不满足,自然就跳到printf("over");这一句了啊

很简单啊

你的第二个if 是从属于第一个if的,就是说第一个if条件不满足不会走第二个if的
另外else是就近原则,所以你的else是跟第二个if配对的
要想输出3 用大括号 把逻辑好好整理下
我这么说 你明白吧

在c语言里面
if (条件)
语句1;
这是被当作一个整句的
也就是说 不需要加大括号
只有if后面跟的语句超过1个才需要大括号来包围 例如
if (条件)
{
语句1;
语句2;
}


if (条件)
语句1;
else
语句2;
也是被当作一个整句
因此

if(a>b)
if(a>c)
printf("%d\n",a);
else
printf("%d\n",b);

相当于
if(a>b)
{
if(a>c)
printf("%d\n",a);
else
printf("%d\n",b);
}
因为 a是2 b是3 a<b 不满足条件 a>b

所以 中间的那个if 不会被运行

else 只和最近的一个 if组成一个结构,所以当程序判断if(a>b)时,不满足条件,直接跳到printf("over");
而以下 if(a>c)
printf("%d\n&q