首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ SDL中断while循环

C++ SDL中断while循环
EN

Stack Overflow用户
提问于 2012-08-20 16:12:49
回答 5查看 673关注 0票数 2

我已经使用C++ SDL几天了,我遇到了一个有趣的问题。

代码语言:javascript
复制
SDL_Event event1;
while(SDL_WaitEvent(&event1))
{
    for(size_t i = 0; i < MainMenuOptions.size();i++)
    {
        if(event1.button.x > MainMenuOptions.at(i).GetX() && event1.button.x < (MainMenuOptions.at(i).GetX() + MainMenuOptions.at(i).GetWidth())  
        && event1.button.y > MainMenuOptions.at(i).GetY()  && event1.button.y < (MainMenuOptions.at(i).GetY() + MainMenuOptions.at(i).GetHeight()))
        {
            break;
        }
    }
}

当我在for循环中使用break时,它会中断for循环,而不是while循环。我如何在不使用goto语句的情况下中断while循环呢?(我听说goto语句是糟糕的编程)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-20 16:18:15

这个问题还有另一个答案,我想我应该在每个人都反对我之前说出来。使用变量当然是一种“好”的方法。然而,仅仅为了跳出循环而创建额外的变量似乎有点过头了,对吧?

所以,是的,这次goto是完美的解决方案。很清楚你在用它做什么,你没有使用另一个变量,代码保持简短,可维护和可读性。

goto语句是糟糕的实践,基本上是基本时代的残余,当时它是改变代码流的唯一方法。然而,现在我们“知道得更清楚了”,并且说goto或任何其他结构都不好,这并不能解决问题。对于你试图用它解决的一个特定问题来说,这可能是不好的(人们试图用goto解决的大多数问题也是如此)。但是,在适当的情况下(就像这里),这是可以的。当然,我不想在这里开始辩论。Goto就像一个非常强大的工具(例如,大锤)。它有它的用途,你不能说一个工具是完全不好的;它是用户以错误的方式使用它。

票数 7
EN

Stack Overflow用户

发布于 2012-08-20 16:56:09

常见的解决方案是将这些东西放入它自己的函数中并从中返回:

代码语言:javascript
复制
inline SDL_Event do_it()
{
    SDL_Event event;
    while(SDL_WaitEvent(&event))
        for(std::size_t i = 0; i < MainMenuOptions.size(); ++i)
            if(/*...*/)
                return event;
    return event; // or whatever else suits, I know too little about your code
}
票数 11
EN

Stack Overflow用户

发布于 2012-08-20 16:15:12

使用变量指示是否需要退出:

代码语言:javascript
复制
bool exit_program = false;

while( !exit_program && SDL_WaitEvent(&event1) )
{
    for( /* ... */ )
    {
        exit_program = true;
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12034241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档