我尝试为256 x 256的数组创建一个从0到31的随机整数数组。代码可以工作,因为我可以很好地处理较小的数组。但是,当尝试创建256x256阵列并将其写出到.txt文件时,它将永远运行。我是个C新手,所以如果有任何关于如何解决这个问题的建议,我将不胜感激。谢谢
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define MaxC 256
#define MaxL 256
int main(){
FILE *fp;
fp = fopen("arrays256.txt","w+");
int c[257] = {0};
int i=0,j=0,r;
int n[MaxC][MaxL] = {{0}};
//int* n = (int*)malloc(MaxC * MaxL * sizeof(int));
srand(time(NULL));
for(i = 0; i < MaxC; i++) {
for(j = 0; j < MaxL; j++) {
do {
r=(rand()%32);
} while( c[r] > 258);
++c[r];
n[i][j]=r;
printf("%3d",n[i][j]);
fprintf(fp,"%3d",n[i][j]);
}
printf("\n");
fprintf(fp,"\n");
}
//free(n);
fclose(fp);
return 0;
}
发布于 2018-09-30 07:48:03
考虑以下因素的影响:
do {
r=(rand()%32);
} while( c[r] > 258);
++c[r];
由于i
和j
上的循环,此代码将被执行MaxC*MaxL
次,即256.256= 65,536次。每次都会选择0到31范围内的某个r
。如果r
超过258,则while
循环将排除选择c[r]
。这会导致各种c[r]
递增,r
的范围从0到31。
考虑当循环被执行259·32= 8,288次时会发生什么。则32个c[r]
中的每一个必须已递增到259。在这一点上,没有不满足c[r] > 258
的c[r]
,因此while
循环永远继续。
https://stackoverflow.com/questions/52573415
复制相似问题