for循环永远不会在c中结束

for循环永远不会在c中结束,c,for-loop,C,For Loop,我试图写一个c程序,每年打印一个网格。我有一个for循环,它每年迭代打印网格,在参数中选择多少年。 for循环打印网格的时间是无限的,因为某些原因超出了网格上的边界。 代码如下: int main(int argc, char *argv[]) { if (argc != 3) /* argc should be 2 for correct execution */ { /* We print argv[0] assuming it is the program name */

我试图写一个c程序,每年打印一个网格。我有一个for循环,它每年迭代打印网格,在参数中选择多少年。 for循环打印网格的时间是无限的,因为某些原因超出了网格上的边界。 代码如下:

    int main(int argc, char *argv[]) {
if (argc != 3) /* argc should be 2 for correct execution */
{
    /* We print argv[0] assuming it is the program name */
    printf("usage: %s filename", argv[0]);
} else {
    int year = atoi(argv[1]);
    double gridA[11][11];
    double gridB[11][11];
    int in;
    int n;
    printf("%d\n",year);
    FILE *file = fopen(argv[2], "r");
    for (int i = 0; i < 12; i++) {
        fscanf(file, "%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",
                &gridA[i][0], &gridA[i][1], &gridA[i][2], &gridA[i][3],
                &gridA[i][4], &gridA[i][5], &gridA[i][6], &gridA[i][7],
                &gridA[i][8], &gridA[i][9], &gridA[i][10], &gridA[i][11]);
    }
    fclose(file);
    for(n = 0; n < year; n++) {
        printf("Year %d: \n", n);
        if (n == 0) {
            for (int i = 0; i < 12; i++) {
                for (int j = 0; j < 12; j++) {
                    if (j == 11) {
                        printf("%.1lf\n", gridA[i][j]);
                    } else {
                        printf("%.1lf ", gridA[i][j]);
                    }
                }
            }
        } else if (n % 2) {
            in = nextDependency(gridA, gridB);
            for (int i = 0; i < 12; i++) {
                for (int j = 0; j < 12; j++) {
                    if (j == 11) {
                        printf("%.1lf\n", gridB[i][j]);
                    } else {
                        printf("%.1lf ", gridB[i][j]);
                    }
                }
            }
        } else {
            in = nextDependency(gridB, gridA);
            for (int i = 0; i < 12; i++) {
                for (int j = 0; j < 12; j++) {
                    if (j == 11) {
                        printf("%.1lf\n", gridA[i][j]);
                    } else {
                        printf("%.1lf ", gridA[i][j]);
                    }
                }
            }
        }
    }
}
exit(0);
}
intmain(intargc,char*argv[]){
如果(argc!=3)/*argc应为2以正确执行*/
{
/*我们打印argv[0],假设它是程序名*/
printf(“用法:%s文件名”,argv[0]);
}否则{
int year=atoi(argv[1]);
双网格[11][11];
双网格[11][11];
int-in;
int n;
printf(“%d\n”,年份);
FILE*FILE=fopen(argv[2],“r”);
对于(int i=0;i<12;i++){
fscanf(文件,“%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf”,
&gridA[i][0]、&gridA[i][1]、&gridA[i][2]、&gridA[i][3],
&gridA[i][4]、&gridA[i][5]、&gridA[i][6]、&gridA[i][7],
&gridA[i][8]、&gridA[i][9]、&gridA[i][10]、&gridA[i][11];
}
fclose(文件);
对于(n=0;n
永不结束的for循环如下:

for(n = 0; n < year; n++) {
printf("Year %d: \n", n); ...
for(n=0;n
通过尝试调试,我发现循环在以下代码之前是有限的:

FILE *file = fopen(argv[2], "r");
    for (int i = 0; i < 12; i++) {
        fscanf(file, "%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",
                &gridA[i][0], &gridA[i][1], &gridA[i][2], &gridA[i][3],
                &gridA[i][4], &gridA[i][5], &gridA[i][6], &gridA[i][7],
                &gridA[i][8], &gridA[i][9], &gridA[i][10], &gridA[i][11]);
    }
FILE*FILE=fopen(argv[2],“r”);
对于(int i=0;i<12;i++){
fscanf(文件,“%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf”,
&gridA[i][0]、&gridA[i][1]、&gridA[i][2]、&gridA[i][3],
&gridA[i][4]、&gridA[i][5]、&gridA[i][6]、&gridA[i][7],
&gridA[i][8]、&gridA[i][9]、&gridA[i][10]、&gridA[i][11];
}

但是,当把代码放在后面时,它会无限循环,这是一个错误,我无法理解它为什么会发生?有人知道我如何解决这个问题吗?

您已经用11乘11的维度定义了网格,但您正在读取其中的12个元素。最后一个元素覆盖了您的循环变量

通常,如果定义大小为
n
的数组,则可以通过
n-1
访问元素
0


在这种情况下,解决方案是为所有12个元素定义具有空间的网格。

您已经使用11乘11的尺寸定义了网格,但您正在向其中读取12个元素。最后一个元素覆盖了循环变量

通常,如果定义大小为
n
的数组,则可以通过
n-1
访问元素
0

在这种情况下,解决方案是为所有12个图元定义具有空间的轴网