2014-04-30 23 views
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);    
} 
+1

因此,個人來說,找出這樣的事情的最好方法就是用調試器來檢查它,並檢查變量是否應該在每一步。如果你使用ide,它應該有內置的;如果不是,那麼如果你使用gcc,你可以使用gdb。 –

回答

1

您之前定義網格矩陣閱讀的大小,所以它可能是設置爲0,0(在技術上它是不確定的,但是這是一個單獨的問題)。

你可能想改變電網的指針二維數組,你nrnc閱讀後你應該做一個適當的(c/m)alloc調用創建數組(不要忘記free它算帳!)

你也在混合使用globals(nr,nc)和傳遞參數(grid)。這是可以的,但如果你打算這樣做,並且你要在mine_setting內部分配網格,那麼你需要改變它以獲取指向網格的指針。