回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++教程 >> C 语言基础教程 >> 47. if 和 else 连用
最 近 更 新
54. goto 语句
53. switch 语句推荐
52. continue 和 break
51. 条件运算符(?:)
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
46. if 语句
45. 循环应用实例 2
最 新 推 荐
53. switch 语句推荐
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
44. 循环应用实例 1推荐
43. 循环嵌套推荐
40. for 循环推荐
37. 关系运算符推荐
36. while 循环推荐
热 门 排 行
2. 第一个 C 程序推荐
31. 预处理指令 #define..推荐
1. C 语言简介
11. 基本数据类型:整型..推荐
24. 运算符的优先级和结..推荐
5. 如何编写函数
30. 字符串字面量推荐
13. 标识符命名规则
36. while 循环推荐
7. 第三个 C 程序推荐
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

47. if 和 else 连用


来源:蚂蚁的 C/C++ 标准编程 作者:antigloss 等级:精品
发布于2006-11-25 16:35 被读2799次 【字体:

    if 语句有两种结构:

        1. if ( condition )
              一条语句/复合语句

        2. if ( condition )
              一条语句/复合语句
           else
              一条语句/复合语句

其中,第一种结构我们前面已经讲过了。现在我们来讲第二种结构的用法。

    首先,请思考一个简单问题:编写程序读取用户输入的整数,如果用户输入不为零,则输出其值;如果用户输入等于零,则提示用户不要输入零。

    如果我们只知道 if 语句的第一种结构,可以这么写:

        scanf("%d", &num);
        if (num)  // 和 if (num != 0) 效果相同
        {
            printf("Non-zero integer: %d\n", num);
        }
        if (num == 0)
        {   // 输出提示
            printf("Zero is not allowed!\n");
        }

而使用 if 语句的第二种结构,我们可以这么写:

        scanf("%d", &num);
        if (num)
        {
            printf("Non-zero integer: %d\n", num);
        }
        else
        {   // 输出提示
            printf("Zero is not allowed!\n");
        }

这段代码的执行流程为:

    1. 如果 num 不等于 0 ,则输出其值,而 else 后面的“一条语句/复合语句”则会被跳过。

    2. 如果 num 等于 0,立刻执行 else 后面的语句(即输出提示)。

而第一种写法的执行流程为:

    1. 如果 num 不为零,则输出其值。至此,第一个 if 语句执行完毕。接着执行第二个 if
       语句,判断 num 是否为零,因为 num 不为零,故跳过其后的“一条语句/复合语句”,
       也就是不输出提示。第二个 if 语句至此也结束了。

    2. 如果 num 等于 0,第一个 if 语句就此执行完毕,接着执行第二个 if 语句,判断 num
       是否为 0,然后才输出提示。

由此可见,使用第一种方法,无论 num 是否为 0,都需要对其进行两次判断,而且第二次判断根本是没必要的,因为如果 num 为真,则肯定不是零,如果 num 为假,则肯定是零;第二种方法仅需对 num 进行一次判断,故其效率较第一种要高。第一种方法使用了两条 if 语句,而第二种方法仅使用了一条整个 if else 结构只算是一条语句

    if 语句的第一种结构使我们可以选择是否执行某条语句/复合语句,而第二种结构使我们可以在两条语句/复合语句中选择其中一条来执行。if else 结构的执行流程图如下:

如果你需要在 if 和 else 之间执行多条语句,必须用大括号把这些语句括住,也就是说,必须使用复合语句。例如,以下代码是错误的:

        if ( condition )
            printf("good\n");
            ++condition;
        else
            --condition;

if 和 else 之间只能有一条语句,无论是否复合语句。这么写才是对的:

        if ( condition )
        {
            printf("good\n");
            ++condition;
        }
        else
            --condition;

注意:else 是和离它最近且未和任何 else 配对的 if 进行配对的,和代码的缩进无关。缩进的作用只是使代码富有层次感,美观易读,对目标代码的生成毫无影响。例如:

        #define   NUM    1
        #define   BER    2

        if ( NUM == 1 )
            if ( BER == 2 )
                printf("Good!\n");
        else
            printf("Too bad!\n");

乍一看,很多人可能都会以为这段代码中的 else 是和 if ( NUM == 1 ) 配对的。其实不然!如果 NUM 不为 1,根本不会执行 else 后面的语句。这段代码中的 else 是和 if ( BER == 2 ) 配对的。如果 NUM 等于 1 并且 BER 不为 2,才会执行 else 后面的语句。

    由此可见,编写代码时,缩进非常重要。好的编程风格可以帮助我们理解代码的含义,而差的编程风格却往往造成严重的误导。改成这样会易读很多:

        if ( NUM == 1 )
            if ( BER == 2 )
                printf("Good!\n");
            else
                printf("Too bad!\n");

如果你的确希望 else 和 if ( NUM == 1 ) 配对,则要这么写:

        if ( NUM == 1 )
        {
            if ( BER == 2 )
                printf("Good!\n");
        }
        else
            printf("Too bad!\n");

此时,虽然 if ( BER == 2 ) 离 else 最近,而且的确还没有和任何 else 配对,但是,由于其位于复合语句里面,而 else 却在复合语句外面,所以 else 不能和它配对。

参考资料:C Primer 5th Edition
          C99 标准

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:C 分支语句
54. goto 语句
53. switch 语句

上一篇:46. if 语句
下一篇:48. 在循环中使用 if 语句

共有评论 0 条 网友评分 1分 查看全部评论

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss