一起talk C栗子吧(第一百八十回:C语言实例--break到哪里)



各位看官们,大家好,上一回中咱们说的是字符和字符串输出函数的例子,这一回咱们说的例子是:break到哪里 。闲话休提,言归正转。让我们一起talk C栗子吧!



看官们,我们这一回的主题是break到哪里,在介绍该主题前,我们先介绍一下break。break是C语言中的一个关键字,在其后面加上分号就构成break语句。啊!这就是一个语句?有看官表示吃惊。我要说的是:这确实是一个语句,break关键字总是这么单枪匹马地构成一条语句。虽然break关键字可以单枪匹马地构成语句,不过break语句总是和循环语句或者switch语句出现在一起。就像金老爷《神雕侠侣》中的黑风双煞,他们总是一起出现,而且让人闻风丧胆。哈哈,看官们别害怕,我们这里没有黑风双煞,我们只有和循环语句或者switch语句一起出现break语句。那么回到我们的主题中来,break语句到底break到哪里了?

要回答这个问题,我们需要把break语句和循环语句或者switch语句放在一起进行说明,因为它们总一起出现在程序中。循环语句或者switch语句,都有自己的作用域,也就是位于大括号范围中的内容。在这两种语句中使用break语句后就会跳出这两种语句的的作用域。我们通过例子来说明,方便大家理解。

    int index = 0;

    while(index < 5)
    {
        //do some thing
        printf("index = %d \n",index);
        index++;

        if(index == 3)
        {
            puts("break loop: while ");
            break;
        }
    }

    puts("hello");

在上面的例子中,while循环语句的作用域就是while语句本身和位于该语句下面大括号中的内容,在使用break语句后,就会跳出while语句的作用域,然后运行位于该作用域后的puts语句,此时它会在终端中输出”hello”。我们在例子中使用的是while循环语句,对于for或者do/while循环语句也是同样的原理,大家可以自己去分析并且动手试试,下面是程序的运行结果,请大家参考:

index = 0
index = 1
index = 2
break loop: while  //index等于3时使用break语句跳出while循环
hello              //运行while循环后的语句

我们介绍完break语句在循环语句中的例子,接下来举一个break语句在switch语句中的例子,请大家参考:

    index = 3;
    switch(index)
    {
    case 1:
        //do some thing
        puts("case 1 runing ");
    break;
    case 3:
        //do some thing
        puts("case 3 runing ");
    break;
    default:
        //do some thing
        puts("case default runing ");
    break;
    }

    puts("hello");

在上面的例子中,switch循环语句的作用域就是switch语句本身和位于该语句下面大括号中的内容,在使用break语句后,就会跳出switch语句的作用域,然后运行位于该作用域后的puts语句,此时它会在终端中输出”hello”。下面是程序的运行结果,请大家参考:

case 3 runing  //运行case 3中的内容,然后使用break跳出switch语句
hello          //运行switch语句后的语句

介绍到这里,我想大家已经明白了break语句break到哪里,接下来我们验证一下大家是不是真理解其中的含义,我们给大家演示一段代码。

    index = 0;
    while(index++ < 5)
    {
        printf("index = %d \n",index);
        switch(index)
        {
            case 1:
                //do some thing
                puts("case 1 running, break switch ");
            break;
            case 2:
                //do some thing
                puts("case 2 running, break switch ");
            break;
            default:
                //do some thing
                puts("default running, break switch ");
            break;
        }

        if(index == 3)
        {
            //do some thing
            puts("if/else breaking ");
            break;
        }
        else
        {
            //do some thing
            puts("if/else running ");
        }

        puts("loop: while running");
    }

    puts("hello");

大家先阅读一下该程序,然后自己动手写出程序的运行结果。下面是程序的运行结果,大家和自己写出的结果对比一下,是不是一样呢?如果结果不一样,那么说明你没有真正理解break语句break到哪里。

index = 1
case 1 running, break switch  //break语句只是break到switch作用域外,
if/else running
loop: while running           //循环仍然在运行,说明break语句没有break到while循环作用域外
index = 2
case 2 running, break switch
if/else running
loop: while running
index = 3
default running, break switch
if/else breaking             //break语句break到while循环的作用域外
hello                        //运行while循环语句后的语句

结合上面的代码和程序的运行结果,我们可以看到,前面的例子中只是单一的while语句或者switch语句,而此处的代码中在while循环中嵌套了switch语句,相比之下会复杂一些。代码中在switch语句中使用了break语句,该语句只是break到了switch作用域外,然而switch语句仍然在while循环语句的作用域中,因此,它不会break到while循环语句外,这点在程序运行结果中体现为不断地执行switch语句中的case,直到index等于3时从if/else语句中的break跳出while循环的作用域。

通过这个例子,我们可以得出以下结论:break语句只能break到自身所在的使用域外,如果作用域有嵌套,那么它不会break到嵌套区域外。这么说可能比较抽象,我们做个简单的图示来说明:

{
    //作用域A
    {
        //作用域B
        break;    //该break语句只能break到作用域B外,不会break到作用域A外;
    }

    break;       //该break语句可以break到作用域A外;
}

看官们,我把本章回中的代码收集整理成一个文件,该文件位于我的资源中,大家可以点击这里下载使用。

各位看官,关于break到哪里的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


时间: 2024-12-07 18:59:36

一起talk C栗子吧(第一百八十回:C语言实例--break到哪里)的相关文章

189第一百八十九章 你的命是我的!

第一百八十九章 你的命是我的!   嗖! 露丝骤然弯腰,避开一名男子的腾空膝撞,未等男子落地,另一人已一脚踢中露丝腹. "唔--" 露丝被这股巨大的力量踹得迅速后退.若非她优秀的平衡能力与沉稳的下盘,怕是这一脚便能将她踢飞倒地. "呼--" 露丝手腕一翻,再次紧握***,抹掉嘴角血渍,那双明亮而有神的眸子死死盯着这对配合得天衣缝的男子. 他们很强. 比前面两个铁汉强大太多. 若是单打独斗,露丝有把握将手心的***刺入对方的心脏. 可他们不会给露丝这个机会,他们的配合

一起talk C栗子吧( 第一百五十回:C语言实例--socket通信接口二)

各位看官们,大家好,上一回中咱们说的是socket通信的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中介绍了套接字通信过程中使用的系统调用,这些系统调用具有通用性,在任何类型的套接字通信过程中都可以使用它们.今天,我们将介绍一些专门用来通过套接字发送和接收数据的系统调用.这些系统调用的功能十分相似,只是在操作的细节上不相同.接下来我们分别介绍他们. 发送数据的系统调用 ssize_t send(int sockfd, const void

第一百八十四节,jQuery-UI,验证注册表单

jQuery-UI,验证注册表单 html <form id="reg" action="123.html" title="会员注册"> <ol class="reg_error"></ol> <p> <label for="user">帐号:</label> <input type="text" name=&

第一百八十六节,jQuery,验证表单插件,Ajax 表单插件,验证和提交表单

jQuery,验证表单插件,Ajax 表单插件,验证和提交表单 HTML <form id="reg" method="post" action="yzh.php" title="会员注册"> <ol class="reg_error"></ol> <p> <label for="user">帐号:</label>

一起talk C栗子吧(第一百六十回:C语言实例--套接字通信模型一)

各位看官们,大家好,上一回中咱们说的是基于AF_INET域数据报套接字通信的例子,这一回咱们说的例子是:套接字通信模型 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在前面章回中介绍的内容中提到过通信的次数,当时只是说可以自己设置通信的次数,并没有做详细的介绍,今天我们一起来看看如何设置通信的次数,以及与它的扩展:通信模型. 迭代通信模型 看官们,通信次数的控制主要体现在服务器端,下面是核心代码: 流套接字通信 while(index++ < 2) { client_fd =

一起talk C栗子吧(第一百七十回:C语言实例--关闭终端中的回显功能一)

各位看官们,大家好,上一回中咱们说的是再谈内置宏的例子,这一回咱们说的例子是:关闭终端中的回显功能 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们今天介绍的是关闭终端中的回显功能,首先介绍一下什么是回显功能.当我们在终端中输入字符时终端马上就会显示我们输入的字符,这就是回显功能.我想这样的操作,大家已经司空见惯了,只是不知道它还有一个专业的名字:回显. 回显给我们带来了很多方便,比如我们可以及时看到自己输入到终端中的内容,而且当输入的内容有错误时还可以进行修改.这时有看官说:

第一百八十九节,jQueryUI,折叠菜单 UI

jQueryUI,折叠菜单 UI 学习要点: 1.使用 accordion 2.修改 accordion 样式 3.accordion()方法的属性 4.accordion()方法的事件 5.accordion 中使用 on 折叠菜单(accordion),和选项卡一样也是一种在同一个页面上切换不同内容的功能 UI.它和选项卡的使用几乎没有什么太大区别,只是显示的效果有所差异罢了. 一.使用 accordion 使用 accordion 比较简单,但需要按照指定的规范即可. HTML 部分 <d

第一百八十五节,jQuery,Ajax 表单插件

jQuery,Ajax 表单插件 学习要点: 1.核心方法 2.option 参数 3.工具方法 传统的表单提交,需要多次跳转页面,极大的消耗资源也缺乏良好的用户体验.而这款 form.js 表单的 Ajax 提交插件将解决这个问题. 一.核心方法 官方网站:http://malsup.com/jquery/form/ form.js 插件有两个核心方法:ajaxForm()和 ajaxSubmit(),它们集合了从控制表单元素 到决定如何管理提交进行的功能.

第一百八十八节,jQuery,选项卡 UI

jQueryUI,选项卡 UI 学习要点: 1.使用 tabs 2.修改 tabs 样式 3.tabs()方法的属性 4.tabs()方法的事件 5.tabs 中使用 on 选项卡(tab),是一种能提供给用户在同一个页面切换不同内容的 UI. 尤其是在页 面布局紧凑的页面上,提供了非常好的用户体验. 一.使用 tabs 使用 tabs 比较简单,但需要按照指定的规范即可. tabs()方法,是jQueryUI的选项卡方法,将一个符合要求的区块,执行选项卡 HTML 部分 <div id="