【共读Primer】38.[5.5]跳转语句 Page170

在C++中一共存在四中跳转语句:

break

continue

goto

return

return代表返回当前函数,这个之前已经有了介绍,接下来我们介绍其他3个跳转语句的作用。

 

break:简单的将就是跳出当前的while、do while、for 或 switch 语句块范围。然后继续执行其后的内容。

#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;

int main()
{
    // break的跳出作用以及起效的范围
    string buf;
    while(cin >> buf && !buf.empty())
    {
        switch(buf[0])
        {
            case '-':
                for(auto it = buf.begin() + 1; it != buf.end(); ++it)
                {
                    if(*it == ' ')
                        break;    // 1# 离开for循环
                }
            break;// 2# 离开 switch语句
            case '+':
                // ...
            break;
        }
        // 结束switch:break 2# 将执行位置跳转到这里
    }// 结束while
}

 

continue: 将最近的循环的当次循环过程终止,直接开始下一次的循环,该跳转语句只能作用于for、while、do while

#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;

int main()
{    
        string buf;
    while(cin >> buf && !buf.empty())
    {
        if(buf[0] != '_')
            continue;// 如果遇到不是_字符,则不进行处理,直接读取下一次
        // 
    }// 结束while
}

goto: 无条件的直接跳转到一个指定的标签

int get_size()
{
    static int i = -8;
    i += 3;
    cout << "run get_size, value i :" << i << endl;
    return i;
    
}

int main()
{
begin:
    int sz = get_size();
    if(sz <= 0)
    {
        goto begin;
    }
}

将本节所有代码集中,并稍作修改(因为本节中无线循环太多,如果不修改,根本就不可能运行结束)。

#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;

int get_size()
{
    static int i = -8;
    i += 3;
    cout << "run get_size, value i :" << i << endl;
    return i;
    
}

int main()
{
    // break的跳出作用以及起效的范围
    string buf;
    while(cin >> buf && !buf.empty())
    {
        switch(buf[0])
        {
            case '-':
                for(auto it = buf.begin() + 1; it != buf.end(); ++it)
                {
                    if(*it == ' ')
                        break;    // 1# 离开for循环
                }
            break;// 2# 离开 switch语句
            case '+':
                buf[0] = ';';
                cout << "break; while" << buf << endl;
            break;
        }
        
        // 结束switch:break 2# 将执行位置跳转到这里
        if (buf[0] == ';')
            break;// 跳出最外层的while循环
    }// 结束while
    
    // continue 不对switch起作用,只对for while do while起作用
    while(cin >> buf && !buf.empty())
    {
        if(buf[0] != '_')
            continue;// 如果遇到不是_字符,则不进行处理,直接读取下一次
        if(buf == "_exit")
            break;
    }// 结束while
    
begin:
    int sz = get_size();
    if(sz <= 0)
    {
        goto begin;
    }
}

给大家一个小题目,如何在不强制终止的情况下,顺利的结束本程序??

 

posted @ 2018-08-30 10:00  chattyku  阅读(241)  评论(0编辑  收藏  举报