0
我是這個網站的新手,請原諒我在這個問題上可能做的任何錯誤用法。C中的掃雷不寫下輸出
我試圖設計一個輸入*.dat
文件的掃雷。 dat文件包含矩陣的行數和列數以及礦山的座標。我必須使用'*'和每個單元格與礦山的距離來顯示礦井。我寫了這樣的東西,但我沒有輸出。
#include<stdio.h>
#include<time.h>
int nr, nc;
void mine_setting(char [nr][nc]);
void show_grid(char [nr][nc]);
void coordinate_evaluation(char [nr][nc], short, short);
int main(void)
{
char grid[nr][nc];
mine_setting(grid);
show_grid(grid);
return 0;
}
void mine_setting(char grid[nr][nc]){
int i, j;
FILE*inStr;
inStr=fopen("minspos.dat","r");
fscanf(inStr, "%d %d", &nr, &nc);
//array creation
for(i=0; i < nr; i++){
for(j=0; j < nc; j++){
grid[i][j] = '0';
}
}
// mine grid
for(i=0; i < nr; i++){
for(j=0; j < nc; j++){
fscanf(inStr, "%s",grid[i][j]);
grid[i][j]='*';
if(grid[i][j]=='*')
coordinate_evaluation(grid, i,j);
}
}
fclose(inStr);
}
void coordinate_evaluation(char grid[nr][nc], short x, short y) {
// -1,-1
if(x-1 >= 0 && y-1 >= 0 && grid[x-1][y-1]!='*')
grid[x-1][y-1]++;
// -1,0
if(x-1 >= 0 && grid[x-1][y]!='*')
grid[x-1][y]++;
// -1,+1
if(x-1 >= 0 && y + 1 < nc && grid[x-1][y+1]!='*')
grid[x-1][y+1]++;
// +1,-1
if(x+1 < nr && y-1 >= 0 && grid[x+1][y-1]!='*')
grid[x+1][y-1]++;
// +1,0
if(x+1 < nr && grid[x+1][y]!='*')
grid[x+1][y]++;
// +1,+1
if(x+1 < nr && y+1 < nc && grid[x+1][y+1]!='*')
grid[x+1][y+1]++;
// 0,-1
if(y-1 >= 0 && grid[x][y-1]!='*')
grid[x][y-1]++;
// 0,+1
if(y+1 < nc && grid[x][y+1]!='*')
grid[x][y+1]++;
}
void show_grid(char grid[nr][nc]) {
short i,j;
for(i=0; i < nr; i++) {
for(j=0; j < nc; j++) {
printf("%c ",grid[i][j]);
}
printf("\n");
}
FILE*outStr;
outStr=fopen("neighbor.dat", "w");
for(i=0; i < nr; i++){
for(j=0; j < nc; j++){
fprintf(outStr, "%c", grid[i][j]);
}
}
fclose(outStr);
}
因此,個人來說,找出這樣的事情的最好方法就是用調試器來檢查它,並檢查變量是否應該在每一步。如果你使用ide,它應該有內置的;如果不是,那麼如果你使用gcc,你可以使用gdb。 –