【问题标题】:Flow control constructs in C++, how to modify? [closed]C++中的流控制结构,如何修改? [关闭]
【发布时间】:2012-08-31 20:18:47
【问题描述】:

这是代码段。如果 if 语句成功,我想回到循环 1。如果 if 语句成功,我需要程序不要添加 1000。

editA.i == 0 在程序的开头。

我想比较两列字符串并获得距离度量。

我尝试了 break 和 continue 命令,但它们都没有按我的意愿工作。

谢谢

for(editA.i; editA.i<6; editA.i++)  // Loop 1
{
    for(editB.j=0; editB.j<6; editB.j++)    // Loop 2
    {
        if(editA.A[editA.i] == editB.B[editB.j])  // if this statment works, 
            // I want to go back to "Loop 1". How???

            sum+= abs(editA.i - editB.j);

        else
            sum+= 1000;
    }

}

【问题讨论】:

  • 向我们展示您如何使用break 以及它是如何不起作用的。 break 是你需要的,如果你想从内循环内部继续外循环。
  • 请不要误用大写锁定按钮。尤其是在标题中。
  • 我感觉他尝试使用 break,但 if 语句周围没有花括号,因此产生了错误。否则,break 语句完全可以满足他的需求。
  • #include #include #include using namespace std;结构词A { 字符串 A[6];诠释我; }; struct wordsB { 字符串 B[6];诠释 j; }; void main() { wordsA editA;词B编辑B; //文档配置文件editA.A[0] = "TH";编辑A.A[1] = "ING";编辑A.A[2] = "开";编辑A.A[3] = "ER";编辑A.A[4] = "与";编辑A.A[5] = "ED"; //类别配置文件 editB.B[0] = "TH";编辑B.B[1] = "ER";编辑B.B[2] =“开”;编辑B.B[3] = "LE";编辑B.B[4] = "ING";编辑B.B[5] = "与";
  • 请在演示问题的最小示例中发布真实代码。 不要重新输入,而是从可编译的程序中复制粘贴。

标签: c++ loops if-statement for-loop


【解决方案1】:
for(editA.i; editA.i<6; editA.i++)  // Loop 1 
{ 
    for(editB.j=0; editB.j<6; editB.j++)    // Loop 2 
    { 
        if(editA.A[editA.i] == editB.B[editB.j])  // if this statment works  I want to go back to "Loop 1"
        {
            sum+= abs(editA.i - editB.j); 
            break ;
        }

        else 
            sum+= 1000; 
    } 
} 

【讨论】:

  • 这就是我使用break的方式,但它不会回到循环1。 for(editA.i; editA.i
  • 你说的没有道理。当您使用 break 时,这会导致代码立即离开内部 for 循环。然后代码执行在内部 for 循环结束时再次开始。然后再次执行外部for循环。
  • 主要语句是这样的:"I want to go back to Loop 1, if the if-statement is successful. I need the program not to add a 1000, if the if-statement succeeds." sum+= abs(editA.i - editB.j); 已经在 if 之后所以我假设他想这样做,然后回到循环 1,所以开始循环 2结束了,因为他把editB.j=0 作为第一个参数。
  • @Grzegorz 是的,你找到了我。我想照你说的去做
  • A ---> AB, DH, FJ, SA(document) B ---> AB, FJ, CD, SA (category) 这是我想做的一个例子。我想比较这两个字符串以获得距离度量。根据我的程序,这里的总和应该是 2001。
【解决方案2】:

如果您只想逃离内部循环,我会在“if 语句”中添加一个 break 语句。如果你想完全转义这两个循环,你应该使用 return 语句。

【讨论】:

    【解决方案3】:

    Grzegorz 的回答是正确的,但是,您的要求可能会有所不同。

    这是你想要的吗?

    for(editA.i; editA.i<6; editA.i++)  // Loop 1
    {
        bool found = false;
        for(editB.j=0; editB.j<6; editB.j++)    // Loop 2
        {
            if(editA.A[editA.i] == editB.B[editB.j]) {  
               sum+= abs(editA.i - editB.j);
               found = true;
               break; 
    
           }
    
        }
        if ( !found ) {
            sum += 1000;
        }
    }
    

    【讨论】:

    • 非常感谢。它按我的意愿工作。
    • @SermetCakmak,将来你应该包括你想要什么以及你目前得到什么的例子。如果您使用了程序生成的数字以及您想要的数字,那么确定问题所在会容易得多。否则我们必须用你的代码和你模糊的回答来玩猜谜游戏,以找出问题所在。
    • 我还有一个与这段代码相关的问题。我需要给你看真正的代码。这是我想做的一个例子。怎么联系你?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多