如何正确退出for循环并运行下一个条件语句



更新:谢谢你的帮助。编写一个可以运行的演示确实帮助我解决了这个问题,但不是以我期望的方式。我认为这是一个编译器优化,而不是一个bug。当if (z == true)中的代码被注释掉时,条件语句被完全跳过,控制返回到if (x)。如果我放入实际的代码,我们在适当的时候点击条件语句。

原始问题:我有一个std::string,我正在遍历它以确定它是否包含某些字符。如果找到这些字符中的任何一个,我希望退出for循环并继续执行下一个条件语句。下面是一个例子:

#include <iostream>
using namespace std;
int main()
{
    bool x = true;
    bool y = true;
    bool z = true;
    std::string str;
    cout << "Enter string: ";
    cin >> str;
    if ( x )
    {
        if ( y )
        {
            std::string::iterator i;
            for ( i = str.begin(); i != str.end(); i++ )
            {
                cout << "Enter for" << endl;
                if ( *i == 'a' || *i == 'b' || *i == 'c' )
                {
                    z = false;
                    cout << "Exit for" << endl;
                    break;
                }
            }
            if ( z == true )
            {
                //cout << "z == true" << endl;
            }
        }
    }
}

问题是程序永远不会碰到if (z == true)。当跳出循环时,控制返回到第一个条件语句(if (x))。

我尝试删除break,而不是设置I = (str.end() - 1)。这导致了相同的行为-它返回到for,确定它位于字符串的最后一个字符,然后再次将控制返回给第一个条件语句,按预期跳过if (z == true)。

我在这里做错了什么?

"当跳出循环时,控制返回到第一个条件语句(if (something))。"

跳出循环时,它刚刚将b设置为false,因此if (b == true)代码不会运行。我误解了什么?

Edit:我认为你的代码过于简化了。显然,这不是你实际运行的代码,因为str从来没有一个值。您需要发布一个我们可以实际运行的示例(但是一旦创建了这样的示例,您可能会自己发现错误)。: -)

相关内容

  • 没有找到相关文章

最新更新