【问题标题】:Escape if statement in CC 中的转义 if 语句
【发布时间】:2026-01-19 06:45:01
【问题描述】:
#pragma warning(disable: 4996)
#include<stdio.h>
int main(){    
    double array1[8] = {0};    
    double data;    
    double lg_data=0;    
    int i = 0, j = 0;    
    int count = 1;    
    int lg_count = 1;    

    printf("7개의 양의 실수를 입력하세요.(마지막 원소는 자동으로 -1이 됩니다.)\n");
    for (i = 0; i < 8; i++){
        if (i == 7){
            array1[i] = -1;
        }
        else{
            scanf("%lf", &array1[i]);
        }
    }//end of loop
    for (i = 0; i < 8; i++){
        count = 1;
        for (j = 0; j < i; j++){
            if (array1[i] == array1[j]){
                count++;
                if (count >= lg_count){
                    lg_count = count;
                    data = array1[i];
                    if (data >= lg_data){
                        lg_data = data;
                    }
                }
            }
            else{
                if (array1[i] >= lg_data){
                    lg_data = array1[i];
                    lg_count = count;
                }
            }
        }//end of for(j)
    }//end of for(i)
    printf("%lf %d\n", lg_data, lg_count);
    return;

如果有与if (array1[i] == array1[j]) 语句一致的值,我想停止 for 循环,即使仍然有与 else 语句一致的值。我已经尝试将 break 语句放在 if 语句中......但它没有用。 我该如何解决这个问题?

【问题讨论】:

  • 你可以使用 GOTO 函数
  • 您要停止内循环还是外循环?内循环,使用break,外循环使用break和flags或者goto。
  • 您的问题是关于内部还是外部for 循环? break 应该可以很好地终止内部 for 循环。要终止外部,只需在if 块中设置一个标志并检查外部for 循环中的标志。
  • 我想停止外循环。什么是标志?以及如何使用标志或转到?
  • 这个线程中有很多解决方案。只是一个提示:由于它是一种糟糕的编程风格,请不要不要使用 goto。

标签: c loops if-statement for-loop


【解决方案1】:

一种选择是将两个嵌套循环拆分为一个单独的函数。通过从函数返回,执行将逃逸两个 for 循环:

void loops() {
   for (i = 0; i < 8; i++){
        count = 1;
        for (j = 0; j < i; j++){
          if (array1[i] == array1[j]){
              ...
              return;
              ...
          }
        }
    }

}

...
loops()
...

【讨论】:

    【解决方案2】:

    break 语句终止执行最近的封闭 doforswitchwhile 语句。

    看下面的例子:

    for (i = 0; i < 8; i++){
        for (j = 0; j < i; j++){
            break; // this will break loop "j"
                   // whereas loop "i" will still iterate
        }
    }
    

    所以如果你想停止两个循环,你可以这样做:

    flag = false;
    for (i = 0; i < 8; i++){
        for (j = 0; j < i; j++){
            if(condition == TRUE_FOR_BREAK) {
                flag = true;
                break; // "j" loop break
            }
        }
        if(flag) {
            break; // "i" loop break
        }
    }
    

    【讨论】:

    • 我可以请求只使用if (flag) {吗?用truefalse 测试相等性有点糟糕;如果是== true,那么已经是true
    【解决方案3】:

    使用break 关键字退出最近的内循环。但是,如果您在该内部循环之外还有其他循环,则需要将变量设置为特定值,并确保所有外部循环始终检查此变量并在设置为该值时退出循环。

    【讨论】:

      【解决方案4】:

      输入这段代码:

      for (i = 0; i < 8; i++){
              count = 1;
              for (j = 0; j < i; j++){
                  if (array1[i] == array1[j]){
                      count++;
                      if (count >= lg_count){
                          lg_count = count;
                          data = array1[i];
                          if (data >= lg_data){
                              lg_data = data;
                          }
                      }
                  }
                  else{
                      if (array1[i] >= lg_data){
                          lg_data = array1[i];
                          lg_count = count;
                      }
                  }
              }//end of for(j)
          }//end of for(i)
      

      在单独的函数中并在条件 if (array1[i] == array1[j]) 之后放置 return。如果您使用的是 VS,则可以使用“提取方法”选项。

      【讨论】:

        【解决方案5】:

        如果要停止执行最近的循环语句,可以使用break; 语句。

        考虑一下这段代码sn-p:

        int i =1;
        while (true) {
            i++;
                if (i == 5) {
                    break;
                }
        }
        

        【讨论】:

        • 这没有回答问题。 OP 知道break
        • 这个答案怎么不能回答OP的问题? OP 询问如何停止他的循环条件,这就是我想出这个解决方案的原因:使用 break 语句。如果 OP 知道 break 语句,那么他不应该问这个问题。
        • 根据 OP 的问题:“我已经尝试将 break 语句放入 ...”。问题是只有一个 break 不会这样做,但这正是您建议的。
        • 也许我在他的代码上看不到中断。这就是为什么我得出结论认为 OP 不知道中断。好吧,我的坏。谢谢哥们;)
        【解决方案6】:

        你应该可以使用break

        EG:

        for(int i = 0; i<50;i++)
        {
            if(i==10)
            {
                break;
            }
        }
        

        这应该迭代直到我 euqals 10,然后跳出循环

        【讨论】:

        • 他有嵌套循环,所以它不能自己做。还有,i = 0; i &gt; 50???循环永远不会进入。
        • 是的,你说得对,我打错字了,意思是我
        • 这没有回答问题。 OP 知道break
        • 实际上他编辑了他的帖子说在我提到它之后,这也是为什么其他人也说同样的话,因为那是相当粗鲁的。
        • 那么是什么让您也无法调整答案?无论如何它都是“错误的”。