2017-01-23 3 views
2

my output valuesC целочисленный массив вопрос

#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 

#define W 160 
#define H 105 

struct dungeons { 
    int x; 
    int y; 
    int width; 
    int height; 
}; 

void randomNumberGenerator(int seed); 
void makeGameBoard(int gameBoard[W][H]); 
void makeDungeonRooms(struct dungeons d[10]); 
void printGame(int gameBoard[W][H]); 

int main(int argc, char *argv[]) { 
    int gameBoard[W][H]; 
    //int gameBoard[160][105] = {2}; 

    struct dungeons d[10]; 

    makeGameBoard(gameBoard); 
    makeDungeonRooms(d); 
    printGame(gameBoard); 

    return 0; 
} 

void randomNumberGenerator(int seed) { 
    srand(seed); 
} 

void makeGameBoard(int gameBoard[160][105]) { 
    int i; 
    int j; 
    for (j = 0; j < 105; j++) { 
     for (i = 0; i < 160; i++) { 
      gameBoard[i][j] = 2; 
      //gameBoard[i][j] = 2; 
      /* 
      if (j == 0) { 
       gameBoard[i][j] = 2; 
      } else 
      if (j == 104) { 
       gameBoard[i][j] = 2; 
      } else 
      if (i == 0) { 
       gameBoard[i][j] = 2; 
      } else 
      if (i == 159) { 
       gameBoard[i][j] = 2; 
      } else { 
       gameBoard[i][j] = 4; 
      } 
      */ 
     } 
    } 
    gameBoard[0][1] = 2; 
    gameBoard[0][0] = 2; 
    gameBoard[159][0] = 3; 
} 

void makeDungeonRooms(struct dungeons d[10]) { 
    int i; 
    for (i = 0; i < W; i++) { 
     d[i].x = 0; 
     d[i].y = 0; 
     d[i].width = 0; 
     d[i].height = 0; 
    } 
} 

void printGame(int g[W][H]) { 
    int i; 
    int j; 

    for (i = 0; i < W; i++) { 
     for (j = 0; j < H; j++) { 
      printf("%d", g[i][j]); 
      /* 
      if (g[i][j] == 2) { 
       printf("|"); 
      } else 
      if (g[i][j] == 1) { 
       printf("X"); 
      } else { 
       printf(" "); 
      } 
      */ 
     } 
     printf("\n"); 
    } 
} 

Я делаю сетку. Но первые 5 строк и половина 6-й строки при печати выводят значение 0. Я устанавливаю все в 2 в цикле for, и даже после того, как я попытаюсь вручную изменить значение, он все равно не делает этого. Последний [159] [0] работает, но ничто в первых 5 строках и половине 6-го не работает. Они остаются 0. Почему?

+3

Показать вызов функции? – haccks

+2

Пожалуйста, покажите [mcve]. – GoodDeeds

+1

Опубликованный код в порядке. Возможно, вы вызываете функцию неправильно или, возможно, печатаете массив неправильно. Другими словами - вам нужно разместить больше своего кода, чтобы получить любую помощь. – 4386427

ответ

1

Проблема здесь:

void makeDungeonRooms(struct dungeons d [10]){ 
    int i; 
    for(i = 0; i< W; i++){ 
    d[i].x = 0; 
    d[i].y = 0; 
    d[i].width = 0; 
    d[i].height = 0; 
    } 
} 

где #define W 160. Доступ к массиву из привязки может вызвать неопределенное поведение. Он может вызвать ошибку сегментации, он может оставаться незамеченным в течение длительного времени или изменять выход программы очень странным образом. Здесь обнуление подземелий также частично обнуляло GameBoard. Держи это так: твоя игра будет веселым!

+0

спасибо, я woudve никогда не поймал, что –

Смежные вопросы