2017-05-01 30 views
0

我試圖讓我把一些號碼掃描,如果有礦(*),打印繁榮和如果沒有礦,印礦的數量接近它。我找不到代碼的問題,但出現錯誤。如果您發現問題,請進行驗證。我找不到代碼錯誤。掃雷艇ç

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#define N 10 

int main (void) 
{ 
    char minefield [N][N]; 
    int i, j; 
    int k; 
    int x, y; 
    int count; 
    int mine_number; 

    count = 0; 
    mine_number = N*N/10; 

    srand((long)time(NULL)); 


    for (k=1; 0< k < mine_number; k=k+1) { 
     i = rand() % N; 
     j = rand() % N; 
     minefield [i][j] = '*'; 
    } 

    for (i=0; i < N; i=i+1) { 
     for (j=0; j < N; j=j+1) { 
      count = 0; 
      if (minefield[i][j] != '*') { 
       if (i == 0) { 
        if (j == 0) { 
         if (minefield [i][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j] == '*') { 
          count = count + 1; 
         } 
        } 
        else if (j == N-1) { 
         if (minefield [i+1][j] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i][j-1] == '*') { 
          count = count + 1; 
         } 
        } 

        else { 
         if (minefield [i][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i][j-1] == '*') { 
          count = count + 1; 
         } 
        } 
       } 

       else if (i == N-1) { 
        if (j == 0) { 
         if (minefield [i-1][j] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i-1][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i][j+1] == '*') { 
          count = count + 1; 
         } 
        } 

        else if (j == N-1) { 
         if (minefield [i-1][j] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i-1][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i][j-1] == '*') { 
          count = count + 1; 
         } 
        } 

        else { 
         if (minefield [i][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i-1][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i-1][j] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i-1][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i][j-1] == '*') { 
          count = count + 1; 
         } 
        } 
       } 

       else { 
        if (j == 0) { 
         if (minefield [i-1][j] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i-1][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j] == '*') { 
          count = count + 1; 
         } 
        } 

        else if (j == N-1) { 
         if (minefield [i-1][j] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i-1][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j] == '*') { 
          count = count + 1; 

         } 
        } 

        else { 
         if (minefield [i-1][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i-1][j] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i-1][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i][j+1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j-1] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j] == '*') { 
          count = count + 1; 
         } 
         if (minefield [i+1][j+1] == '*') { 
          count = count + 1; 
         } 
        } 
       } 
      } 
     } 
    } 

    scanf("%d %d", &x, &y); 

    if (minefield[x][y] = '*') { 
     printf("boom"); 
    } 

    else { 
     printf("%d", count); 
    } 

    return 0; 
} 
+0

1)'0 'K '如果(雷區[X] [Y] == '*'){'3)'否則{ \t \t的printf( 「%d」,計數); \t}'??? – BLUEPIXY

+2

打開你的編譯器警告。例如,Clang在上面的註釋中發出:*「main.c:193:25:使用賦值的結果作爲無括號的條件」*(2)。 – WhozCraig

+1

請注意,由於您不檢查是否覆蓋現有的礦山,因此很可能最終放置的礦山數量比您想象的要少。另一方面,你最終可能會放置更多的地雷,因爲你沒有初始化你的'雷區',它可能已經有垃圾星號了。 –

回答

0

您的基本問題是,你指望你讀的輸入,即之前你知道什麼xy是前。換句話說,目前你在整個雷區都算上「某物」,這不是你想要的。

所以,我們要做的第一件事就是在計數前閱讀xy

而且在我看來,你的大if說法是難以閱讀。你可以重組它喜歡:

if (scanf("%d %d", &x, &y) != 2 || x < 0 || x >= N || y < 0 || y >= N) 
{ 
    // Illegal input 
    exit(1); 
} 

if (minefield[x][y] == '*') { 
    printf("boom"); 
} 
else { 
    count = 0; 

    if (x-1 >= 0 && y-1 >= 0) count += (minefield[x-1][y-1] == '*'); 
    if (x-1 >= 0) count += (minefield[x-1][y] == '*'); 
    .... 
    .... Add code to cover all 8 combinations (i.e. add the 5 missing combinations) 
    .... 
    if (x+1 < N && y+1 < N) count += (minefield[x+1][y+1] == '*'); 

    printf("%d", count); 
} 
+0

謝謝你的回答。我會試試看。 –