for循环永远不会在c中结束
我试图写一个c程序,每年打印一个网格。我有一个for循环,它每年迭代打印网格,在参数中选择多少年。 for循环打印网格的时间是无限的,因为某些原因超出了网格上的边界。 代码如下: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 */
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个图元定义具有空间的轴网