中断跳转
break 运算符用于提前终止 for、while、do 循环,以及从 switch 选择语句退出。该运算符只能用于指定的语句,如果有多个嵌套语句,则只作用于包含 break 的语句。执行完 break 语句后,程序继续执行被中断循环或 switch 后面的语句。
语法非常简单:break 关键字和一个分号:
break ; |
当在循环内部使用时, break 通常在 if/else 条件运算符的一个分支内实现。
考虑一个每秒打印一次当前系统时间计数器,但不超过100次的脚本。它提供了用户对进程中断的处理:为此,IsStopped 函数在条件运算符 if 中被轮询,并且它的从属语句包含 break (StmtJumpBreak.mq5)。
int count = 0;
|
在下面的例子中,用乘法表填充对角矩阵(右上角始终用零填充)。
int a[10][10] = {0};
|
当内部循环变量 j 大于外部循环变量 i 时,break 语句中断内部循环。当然,这并不是对角填充矩阵的最佳方式:从 0 到 i 无任何 break 的循环 j 会更容易,但这里它验证了有 break 和无 break 的等效结构的存在。
虽然这种现象在生产项目中可能不那么明显,但是建议尽可能避免使用 break 运算符,并用附加变量(例如,一个名称“一目了然”的布尔变量 needAbreak )来代替它,这些变量应该用在循环文件头中的终端表达式中,以便按标准的方式中断它们。
假设使用两个嵌套循环来查找字符串中的重复字符。第一个循环按顺序使字符串中的每个字符成为当前字符,第二个循环(向右)遍历其余的字符。
string s = "Hello, " + Symbol();
|
如果位置 i 和 j 处的字符匹配,记住这个匹配字符并通过 break 退出循环。
可以假设变量 d 在这个片段执行后包含字母 'l'。但是,如果把脚本套用在最流行的金融工具 "EURUSD" 上,答案会是 'U'。这是因为 break 只中断内部循环,在找到第一个匹配项(单词 "Hello" 中的 'll')后,从 i 处继续循环。因此,要同时从多个嵌套循环中退出,必须采取额外的措施。
最流行的方法是将一个(填充在内部循环中的)变量包含在外部循环(或所有外部循环)的条件中。在我们的例子中,已经有这样一个变量:d。
for(int i = 0; i < n && d == 0; ++i)
|
检查 d 是否等于 0 ,在找到第一个 0 之后立即停止外部循环。但是可以将这个检查添加到无需使用 break 的内部循环中。
for(int i = 0; i < n && d == 0; ++i)
|