利用goto语句实现for循环以及break和continue

起因

在体会 break 和 continue 的跳转的时候,突发奇想,能不能利用 goto 语句实现 break 和 continue 的功能,而不使用 break 语句和 continue 语句

思考

首先梳理一下for, break, continue的语法,然后再考虑使用goto语句转换

  • for 循环的语法:
for (init-statement; condition; expression)
	statement
nextline

break 语句直接跳出了循环体,不再执行 expression,也就是跳转到 nextline 处。
continue 语句跳转至 expression 处,不再执行当前循环的剩余内容。

  • for 循环用 goto 语句实现可能是这样的:
INITIALIZATION:
    init-statement
CONDITION:
    if (condition)
        goto LOOP_BODY;
    else
        goto NEXT_LINE;
LOOP_BODY:
    statement
END_OF_ITERATION:
    expression
    goto CONDITION;
NEXT_LINE:
	XXXXXXXX
  • break 和 continue 的实现
// break
goto NEXT_LINE;
// continue
goto END_OF_ITERATION;
实现

开始动手做实验,get your hands dirty!

  • 首先用 for, break, continue 写一段简单的测试程序,以便和 goto 版本的实现进行对照
int i;
for (i = 0; i < 10; ++i)
{
    if (i == 3)
        continue;
    cout << i << " ";
    if (i == 7)
        break;
}
cout << endl;
cout << "NEW LINE" << endl;
  • 然后是 goto 版本的实现
    int i;
INITIALIZATION:
    i = 0;
CONDITION:
    if (i < 10)
        goto LOOP_BODY;
    else
        goto NEXT_LINE;
LOOP_BODY:
    if (i == 3)
        // continue;
        goto END_OF_ITERATION;
    cout << i << " ";
    if (i == 7)
        // break;
        goto NEXT_LINE;
END_OF_ITERATION:
    ++i;
    goto CONDITION;
NEXT_LINE:
    cout << endl;
    cout << "NEW LINE" << endl;
结果

两个版本代码的运行结果是一样的
运行结果
完整代码如下:

#include <iostream>
using namespace std;

int main()
{
// goto version
    int i;
INITIALIZATION:
    i = 0;
CONDITION:
    if (i < 10)
        goto LOOP_BODY;
    else
        goto NEXT_LINE;
LOOP_BODY:
    if (i == 3)
        // continue;
        goto END_OF_ITERATION;
    cout << i << " ";
    if (i == 7)
        // break;
        goto NEXT_LINE;
END_OF_ITERATION:
    ++i;
    goto CONDITION;
NEXT_LINE:
    cout << endl;
    cout << "NEW LINE" << endl;
// normal version
    for (i = 0; i < 10; ++i)
    {
        if (i == 3)
            continue;
        cout << i << " ";
        if (i == 7)
            break;
    }
    cout << endl;
    cout << "NEW LINE" << endl;
    return 0;
}

这样子似乎更理解了for, break 和 continue,对程序的执行流程也更清晰了。
另外,此次实验主要针对的是 for 循环中的 break 语句;while 循环和switch 中则是另一个故事了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值