xiang__jie 发表于 2011-3-1 00:30:24

为什么不能去掉以下表达式?

#include <stdio.h>
void main ()
{
int a,b;
printf("please input A,b: ");
scanf("%d%d",&a,&b);
if(a!=b)
if(a>b) printf("A>B\n");
else printf("A<B\n");
else printf("A=B\n");
}


各位前辈,小弟我个人觉得程序代码中if(a!=b)应该是多余的,可是编译不能通过,因为我觉得下面if(a>b) printf("A>B\n");
else printf("A<B\n");
else printf("A=B\n");
}
这三句代码包括了a<b,a>b和a=b,三种情况,不正是if(a!=b)的三种情况吗?为什么if(a!=b)不能少?请前辈解释

风扫地 发表于 2011-3-1 01:10:01

本帖最后由 风扫地 于 2011-3-1 02:13 编辑

if(a>b) printf("A>B\n");
else printf("A<B\n");
else printf("A=B\n");
这个是没有办法编译通过的。。
一个else(后面的语句)要与一个if配对来对if()中条件为假时系统响应的操作。
而你写的。
if(a>b) printf("A>B\n");
else printf("A<B\n");
这两句就只能判断A是不是大于B。这里面只有两种情况,大于不大于(即小于或等于)。。。
第三个else无法编译通过....
关于if和 else
有else 必有if。。。
有if不一定有else

超越自我 发表于 2011-3-1 08:53:56

本帖最后由 超越自我 于 2011-3-1 08:58 编辑

你的代码可以理解为:
#include <stdio.h>
void main ()
{
int a,b;
printf("please input a,b: ");
scanf("%d%d",&a,&b);
if(a!=b)\\这是一个嵌套的选择型判断语句,先判断a!=b,如果是a!=b,则进一步进行判断a>b还是a<b,执行嵌套判断语句,如果a=b,则不进一步判断,也就是不执行嵌套的判断语句,直接在屏幕上打印出a=b   
    {
         if(a>b) ;
         printf("a>b\n");
         else
         printf("a<b\n");
    }
else
printf("a=b\n");
}

ps:楼主似乎变量没有统一,一下大写一下小写,c语言变量大小写是有区别的

yhzxwn 发表于 2011-3-1 11:04:29

根据你的思路我做了一个小的东西你看下哈,
只要3个条件即可
void main()
{
int a,b;
printf("pls input a,b:\n");
scanf("%d\n%d",&a,&b);
if (a>b)
printf("a=%d>b=%d",a,b);
else if(a<b)
printf("a=%d<b=%d",a,b);
else
printf("a=%d=b=%d",a,b);
}

xiang__jie 发表于 2011-3-1 20:52:37

首先谢谢上面的朋友,不过在下还是不是很明白,还不是太懂嵌套,希望有朋友能够就嵌套解释一下该例题!

yhzxwn 发表于 2011-3-1 21:00:55

以上的条件都不成立则执行最后的代码

nbceshi 发表于 2011-3-1 21:59:36

写程序多用几个括号啊,
你的程序如下:
if(a!=b)
if(a>b) printf("A>B\n");
else printf("A<B\n");
else printf("A=B\n");

我加几个括号先
if(a!=b)
{
            if(a>b)               
             {
               printf("A>B\n");
             }
            else
             {
            printf("A<B\n");
             }
}
else
{
printf("A=B\n");
}
这下对应关系应该理解了吧,
if(a!=b)                      和else printf("A=B\n")是一对
if(a>b) printf("A>B\n) 和else printf("A<B\n")是一对

追梦1航海 发表于 2014-3-15 13:54:10

汗,表示对你很蛋疼啊,一个if后面这么可以跟两个else呢,如果你去掉那肯定会报错啦
其实这个程序是这样匹配的
if
      if
      else
else
明白了吧,第一个if匹配最后一个else
页: [1]
查看完整版本: 为什么不能去掉以下表达式?