2017-01-23 6 views
2

my output valuesC int array Ausgabe

#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"); 
    } 
} 

Ich bin ein Raster zu machen. Aber die ersten 5 Reihen und die Hälfte der 6. Reihe, wenn gedruckt, geben den Wert 0 aus. Ich setze alles auf 2 in der for Schleife, und selbst nachdem ich versuche, den Wert manuell zu ändern, tut es immer noch nicht. Der letzte [159] [0] funktioniert, aber nichts in den ersten 5 Zeilen und der Hälfte des sechsten scheint zu funktionieren. Sie bleiben 0. Warum?

+3

Zeigen Sie uns Ihren Funktionsaufruf? – haccks

+2

Bitte zeigen Sie [mcve]. – GoodDeeds

+1

Der gepostete Code ist in Ordnung. Vielleicht rufen Sie die Funktion falsch auf oder Sie drucken das Array falsch. Mit anderen Worten: Sie müssen mehr Code eingeben, um Hilfe zu erhalten. – 4386427

Antwort

1

Das Problem ist hier:

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; 
    } 
} 

wo #define W 160. Der Zugriff auf ein Array außerhalb des Bereichs kann undefiniertes Verhalten auslösen. Es kann einen Segmentierungsfehler auslösen, es kann für lange Zeit unbemerkt bleiben oder die Ausgabe des Programms auf sehr seltsame Weise verändern. Hier wurde das gameBoard auch durch Nullen der Dungeons auf Null gesetzt. Halten Sie es so: Ihr Spiel wird urkomisch sein!

+0

danke, ich hätte das nie erwischt –