2017-05-01 10 views
0

는 내가 검사에 몇 가지 숫자를 넣을 때 만들려고 노력하고있어이 광산 (*), 인쇄 붐의 더 광산이 존재하지 않는 경우는, 근처에 광산의 수를 인쇄합니다. 코드에 문제가 없는데 오류가 있습니다. 문제를 발견하면 확인하십시오.코드 오류를 찾을 수 없습니다. 지뢰 찾기 C

#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

기존 광산을 덮어 썼는지 확인하지 않기 때문에 생각보다 적은 수의 광산을 배치 할 가능성이 매우 높습니다. 반면에, 여러분은'minefield '를 초기화하지 않았기 때문에 예상보다 많은 광산을 배치하게 될 것입니다. 여러분은 이미 쓰레기 별표가있을 수 있습니다. –

답변

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

답변 해 주셔서 감사합니다. 시도해 볼게. –