goto用法

goto:死循环用法

void CMamyTestDlg::OnBnClickedButton3()
{
failed:
    MessageBox(_T("跪了!"));

    CString s(_T("abcdef"));
    int nub = s.Find(_T("c"));
    if (nub> 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }
    nub = s.Find(_T("x"));
    if (nub > 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }
/*****************************************************
goto:放在函数头的情况下!!
      以下这个Find是不执行的,,因为上边goto failded,
  使函数又回头了函数头了,,goto failed == 递归回调自己
*****************************************************/
    nub = s.Find(_T("de"));
    if (nub > 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }
}

goto:return用法

void CMamyTestDlg::OnBnClickedButton3()
{

    CString s(_T("abcdef"));
    int nub = s.Find(_T("c"));
    if (nub> 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }
    nub = s.Find(_T("x"));
    if (nub > 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }
/*****************************************************
goto:放在函数尾的情况下!!
      以下这个Find是不执行的,,因为上边goto failded,
  使函数已经走到了函数末尾了,,goto failed == return
*****************************************************/
    nub = s.Find(_T("de"));
    if (nub > 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }
failed:
    MessageBox(_T("跪了!"));
}

goto:--> failed:正常语句执行了

void CMamyTestDlg::OnBnClickedButton3()
{
    CString s(_T("abcdef"));
    int nub = s.Find(_T("c"));
    if (nub> 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }

    nub = s.Find(_T("de"));
    if (nub > 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }
failed:
    MessageBox(_T("跪了!"));
}
输出:
"找到了!"
"找到了!"
"跪了!"

goto: 普通用法(业余)

void CMamyTestDlg::OnBnClickedButton3()
{
    CString s(_T("abcdef"));
    int nub = s.Find(_T("c"));
    if (nub> 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }

    nub = s.Find(_T("de"));
    if (nub > 0)
    {
        MessageBox(_T("找到了!"));
    }
    else
    {
        goto failed;
    }
    return;
failed:
    MessageBox(_T("跪了!"));
}

goto: goto精髓应该不是这么用的,以后补充

当程序有多层嵌套,当处在嵌套内的逻辑判断为真或为假时,
需要彻底或者连续跳出几层循环时,一般考虑使用goto,
因为break一次只能跳出一层,
并且需要跳出多层循环时需要假如更多的判断逻辑,
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,981评论 0 11
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,531评论 1 19
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,041评论 0 9
  • 犹豫这个词,古书里就有了。 注书的学者们说,犹,是一种异兽的名字。但他们活在一个动物分类不需要界门纲目科属种的太平...
    尺八_阅读 856评论 1 12
  • 布拉格被唤醒阅读 199评论 0 0

友情链接更多精彩内容