2016-04-10 18 views
-1

プログラムは、16×16グリッドを印刷し、複数の要素をグリッド内に水平にランダムに挿入することを想定しています。複数回試行すると、シンボルがグリッドに挿入されます。なぜこれが起こるのかと思います。ここに私のコードのコピーは、これまでのところです:複数の要素を配列に挿入する方法

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

char **create2DArray(); 
#define WIDTH 16 
#define HEIGHT 16 
char** myArray; //global array 

void main() 
{ 
    myArray = create2DArray(); 
} 

char **create2DArray(){ 
int i,j; 
char **array = (char **) malloc(sizeof(char *) * WIDTH); 

for(i=0; i<WIDTH; i++) 
array[i] = (char *) malloc(sizeof(char) * HEIGHT); 


void insertHorizontally(char* word, char** array); 
srand(time(NULL)); 
int WIDTH_1 = (rand()%15)+ 1; 
int HEIGHT_1 = (rand()%15) + 1; 
int insert; 

char* word[] = {"CAT","DOG",}; 

insert = strlen(word); 

for(i=0; i<WIDTH; i++){ 
for(j=0; j<HEIGHT; j++){ 

array[i][j] = '.'; 
} 
} 

for (j = HEIGHT_1; j < HEIGHT_1 + insert; j ++) { 
array[WIDTH_1][j] = word[j - HEIGHT_1]; 
} 


void printArray(char** array); 

for(i=0; i<WIDTH; i++){ 

for(j=0; j<HEIGHT; j++){ 

printf("%c ", array[i][j]); 
} 
printf("\n"); 
} 

return array; 
} 

すべてのヘルプ、ヒントやアドバイスをいただければ幸いです:)

+1

ヒント: 'void main'ではなく' int main'を使用してください。コードを適切にインデントすると、あなたや他の人がコードを理解する機会が増えます。最後に、警告を有効にしてコンパイルしてください。 –

答えて

0

を私はこれがあなたを助け願っています。これはLinuxでコンパイルされています。ここで良い助けを受けるために、より読みやすいソースを試してください。

注:ランダム関数が行の最後のインデックスを与える場合、要素が部分的に挿入されている可能性があります。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
char **create2DArray(); 
#define WIDTH 16 
#define HEIGHT 16 
char** myArray; //global array 


char **create2DArray(){ 
    int i,j; 
    char **array = (char **) malloc(sizeof(char *) * WIDTH); 

    for(i=0; i<WIDTH; i++) 
     array[i] = (char *) malloc(sizeof(char) * HEIGHT); 
    return array; 
} 

void insertHorizontally(char** word, int num, char** array) 
{ 
    srand(time(NULL)); 
    int i, j, k; 
    int WIDTH_1; 
    int HEIGHT_1; 
    int insert; 

    for(i=0; i<WIDTH; i++){ 
     for(j=0; j<HEIGHT; j++){ 
      array[i][j] = '.'; 
     } 
    } 
    for(k = 0; k < num; k++){ 
     insert = strlen(word[k]); 
     WIDTH_1 = (rand() % WIDTH); 
     HEIGHT_1 = (rand() % HEIGHT); 
     for (i= 0, j = HEIGHT_1; i < insert && j < HEIGHT ; j ++, i ++) 
      array[WIDTH_1][j] = word[k][j - HEIGHT_1]; 
    } 
} 

void printArray(char** array){ 
    int i, j; 
    for(i=0; i<WIDTH; i++){ 
     for(j=0; j<HEIGHT; j++){ 
      printf("%c ", array[i][j]); 
     } 
     printf("\n"); 
    } 
} 

void main() 
{ 
    myArray = create2DArray(); 
    char *word[] = {{"CAT"},{"DOG"},{"FOX"}}; 
    insertHorizontally(word, sizeof(word)/sizeof(char *), myArray); 
    printArray(myArray); 

} 
関連する問題