【发布时间】:2021-01-18 08:26:17
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void initialization(int n, int grid[n][n]){
srand(time(0));
for(int i = 0 ; i < n; i++){
int no1 = 0, no0 = 0;
for(int j = 0; j < n; j++){
int checker = rand();
if(no1 != n/2 && no0 != n/2){
if(checker % 2 == 0){
grid[i][j]=1;
no1++;
}
else{
grid[i][j]=0;
no0++;
}
}
else if(no1 != n/2 && no0 == n/2){
grid[i][j]=1;
no1++;
}
else if(no1 == n/2 && no0 != n/2){
grid[i][j]=0;
no0++;
}
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
printf("%d", grid[i][j]);
}
printf("\n");
}
}
int main() {
int n;
printf("Enter an even number between [2,80]: ");
scanf("%d",n);
if(n % 2 == 1){
return 1;
}
int grid[n][n];
initialization(n, &grid);
return 0;
}
所以这就是我想要做的:我试图要求用户输入一个偶数值,然后制作一个 nxn 网格。这个 nxn 网格应该在每行中随机有 n/2 个 1 和 0。但由于某种原因,每次我运行这段代码时都会出现分段错误
【问题讨论】:
-
在 main 中替换
scanf("%d",n);byscanf("%d",&n);和initialization(n, &grid);由initialization(n, grid);=> 投票关闭“错字” -
第二个问题是由 gcc 发出的,即使没有选项,这两个问题也是由 gcc 使用选项
-Wall发出的,我鼓励你始终使用该选项并考虑警告,这些警告对纠正您的代码有很大帮助