【共读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; } }
给大家一个小题目,如何在不强制终止的情况下,顺利的结束本程序??