关于#break#的问题,如何解决?


#include
int main() {
    int n;
    scanf("%d", &n);
    int i;
    int k, t, v;
    char a[30][30], m;
    for (i = 1; i <= n; i++) {
        scanf("%s", &a[i]);
    }
    for (i = 1; i <= n; i++) {
        for (k = i + 1; k <= n; k++) {
            for (t = 0; t <= 29 && (a[i][t] != '\0' && a[k][t] != '\0'); t++) {
                if (a[i][t] > a[k][t]) {
                    for (v = 0; v <= 29; v++) {
                        m = a[i][v];
                        a[i][v] = a[k][v];
                        a[k][v] = m;
                    }
                    break;
                }
                else if (a[i][t] < a[k][t]) {
                    break;
                }
            }
        }
    }
    for (i = 1; i <= n; i++) {
        printf("%s\n", a[i]);
    }
    return 0;
}

break存在与否对于此程序运行有何影响?

  • break 退出当前循环; 不加 break,继续当前循环; 代入你这里就是 满足条件处理完了,有break就退出当前循环; 没有break,还继续循环处理,那就会影响后续的结果吧。
  • 另外输入那里,把 & 去掉,%s输入,直接字符数组名即可,你这里就是如下:
scanf("%s", a[i]);

以下答案引用自GPT-3大模型,请合理使用:

示例。

break对于此程序的运行影响至关重要。如果没有break,循环就会一直继续执行,从而判断出错。可以看到,在每次遍历字符串时,如果两个字符串第t个字符不相等,则可以根据字典顺序将大的字符串向前移动,这时就需要用到break来让内层循环退出来,否则就会继续比较两个字符串的下一个字符,从而让排序出现错误。例如:

#include<stdio.h>
int main() {
    int n;
    scanf("%d", &n);
    int i;
    int k, t, v;
    char a[30][30], m;
    for (i = 1; i <= n; i++) {
        scanf("%s", &a[i]);
    }
    for (i = 1; i <= n; i++) {
        for (k = i + 1; k <= n; k++) {
            for (t = 0; t <= 29 && (a[i][t] != '\0' && a[k][t] != '\0'); t++) {
                if (a[i][t] > a[k][t]) {
                    for (v = 0; v <= 29; v++) {
                        m = a[i][v];
                        a[i][v] = a[k][v];
                        a[k][v] = m;
                    }
                    break;   //加入break
                }
                else if (a[i][t] < a[k][t]) {
                    break;   //加入break
                }
            }
        }
    }
    for (i = 1; i <= n; i++) {
        printf("%s\n", a[i]);
    }
    return 0;
}

如果我的回答解决了您的问题,请采纳我的回答