2017-11-27 11 views
-1

ユーザーが5つのサイコロを投げて結果を表示するためのプログラムを作成する画面上に「グラフィカルに」表示されます。
プログラムは、5つの数字の配列を入力して5つのダイスローをシミュレートすることから始める必要があります関数は、スクリーン上に文字を表示することによって結果を「描く」べきであり、合計を計算します。
最初の関数にエラーメッセージが表示されますが、「if」で定義した行列は定義していません。範囲外のときに変数が定義されていない

#include <stdio.h> 
int sumOfDie(int inputArray[], int arraySize); 
int drawDie(int inputArray[], int arraySize) 
{ 
int i, row, column=0; 

for (i=0; i<arraySize; i++) //determine the graphic number from the random number 
{ 
    if (inputArray[i]==1) 
    { 
     char matrix [3][4] = {{" "},{" * "},{" "}}; 
    } 
    if (inputArray[i]==2) 
    { 
     char matrix [3][4] = {{"* "},{" "},{" *"}}; 
    } 
    if (inputArray[i]==3) 
    { 
     char matrix [3][4] = {{"* "},{" * "},{" *"}}; 
    } 
    if (inputArray[i]==4) 
    { 
     char matrix [3][4] = {{"* *"},{" "},{"* *"}}; 
    } 
    if (inputArray[i]==5) 
    { 
     char matrix [3][4] = {{"* *"},{" * "},{"* *"}}; 
    } 

    for (row=0; row<3; row++) //Print out the matrix 
    { 
     for(column=0; column<4; column++) 
     { 
      printf("%c  ", matrix[row][column]); 
     } 
     printf("\n"); 
    } 
} 

} 
int sumOfDie(int inputArray[], int arraySize) 
{ 
    int i, sum=0; 
    for (i=0; i<arraySize; i++) 
    { 
     sum=sum+inputArray[i]; 
    } 
    return sum; 
} 



int main(void) 
{ 
    int i; 
    int inputArry[5]; 
    srand(time(NULL)); 


for(i=0; i<5; i++) 
{ 
    inputArry[i] = rand()%5+1; 
} 

for (i=0; i<5; i++) 
{ 
    printf("Number:%d\n", inputArry[i]); 
} 

drawDie(inputArry, 5); 

sum = sumOfDie(inputArray,5) 
printf("The sum of %i + %i + %i + %i + %i = %i", inputArry[0], inputArry[1], inputArry[2], inputArry[3], inputArry[4], sum); 

return 0; 
} 
+3

あなたの間違いがあります。 ifスコープを離れると、変数はもう存在しません。 'for'ループの外側に配列を定義してみてください。それにもかかわらず、 'matrix'をcharとして宣言していますが、単一のcharの代わりに文字列を格納しようとしています。 – phyloflash

+0

http://coliru.stacked-crooked.com/a/ec80ebb03d022a80 – sp2danny

答えて

1

彼らは印刷するために後で使用することができないように、matrixという名前の変数のそれぞれの範囲は、それらが宣言されているifの文に限定されています。

ダイスを表すために必要なすべての文字列を1つの多次元配列で収集し、必要な文字列を印刷することができます。

これは(6面ダイスを考慮して)可能な実装である:

出力
#include <stdio.h> 

void print_n_times_in_a_row(const char *str, int n) 
{ 
    for (int i = 0; i < n; ++i) 
    { 
     printf(" %s", str); 
    } 
    puts(""); 
} 

void draw_dices(int* values, int n) 
{ 
    static const char dice_str[][3][8] = { 
     {{"  "},{" * "},{"  "}}, // 1 
     {{" *  "},{"  "},{"  * "}}, // 2 
     {{" *  "},{" * "},{"  * "}}, // ... 
     {{" * * "},{"  "},{" * * "}}, 
     {{" * * "},{" * "},{" * * "}}, 
     {{" * * "},{" * * "},{" * * "}} // 6. Just in case... 
    }; 

    // I'll print all the "dices" in a row 
    print_n_times_in_a_row("+-------+", n); 
    for (int j = 0; j < 3; ++j) 
    { 
     for (int i = 0; i < n; ++i) 
     { 
      printf(" |%s|", dice_str[values[i] - 1][j]); 
     } 
     puts(""); 
    } 
    print_n_times_in_a_row("+-------+", n); 
} 


int main(void) 
{ 
    int dices[] = {4, 2, 5, 6, 1, 3}; 

    draw_dices(dices, 6); 
} 

:char型のmatrix`が `if`スコープ記述書内で定義された`ので

 
+-------+ +-------+ +-------+ +-------+ +-------+ +-------+ 
| * * | | *  | | * * | | * * | |  | | *  | 
|  | |  | | * | | * * | | * | | * | 
| * * | |  * | | * * | | * * | |  | |  * | 
+-------+ +-------+ +-------+ +-------+ +-------+ +-------+ 
0

あなたは配列が常に声明char matrix [3][4];

があればスコープを出た後、変数はもう

存在しない場合は、直前にあなたの配列を宣言する必要があり 作成された場合でも、条件付きの配列を宣言してはなりません
-1

あなたのコードを動作させるソリューションは、このようなものです。スイッチケースを使用して、画面上で何を印刷したいのかを区別することができます。 arrayは、スイッチで使用されるインデックスのみを格納します。あなたは間違っていた何

if内のブロックがarrayはもう存在しない場合に実行されると、あなたが、if文のスコープ内のarrayを宣言し、その場所についてでした。

また、char arrayの中にデータを格納する方法についての問題は、事前に側面を指定する必要があります(実行時にC99でも可能ですがスキップしてみましょう)、動的に割り当てますここに必要)。

したがって、char varは1バイトを格納できますが、文字列{" "}を格納しようとしていたため、エラーが発生します。機能drawDie

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

int sumOfDie(int inputArray[], int arraySize); 
int drawDie(int inputArray[], int arraySize) 
{ 
    int i, row, column=0; 

    char matrix[5][5]; 
    for (i=0; i<arraySize; i++) //determine the graphic number from the random number 
    { 
     if (inputArray[i]==1) 
     { 
      matrix [3][4] = 0; //{{" "},{" * "},{" "}}; 
     } 
     if (inputArray[i]==2) 
     { 
      matrix [3][4] = 1; //{{"* "},{" "},{" *"}}; 
     } 
     if (inputArray[i]==3) 
     { 
      matrix [3][4] = 2; //{{"* "},{" * "},{" *"}}; 
     } 
     if (inputArray[i]==4) 
     { 
      matrix [3][4] = 3; //{{"* *"},{" "},{"* *"}}; 
     } 
     if (inputArray[i]==5) 
     { 
      matrix [3][4] = 4; //{{"* *"},{" * "},{"* *"}}; 
     } 

     for (row=0; row<3; row++) //Print out the matrix 
     { 
      for(column=0; column<4; column++) 
      { 
       switch (matrix[row][column]) { 
        case 0: 
         // change the print accordingly 
         printf(" *  \n"); 
         break; 
        case 1: 
         // change the print accordingly 
         printf(" *  \n"); 
         break; 
        case 2: 
         // change the print accordingly 
         printf(" *  \n"); 
         break; 
        case 3: 
         // change the print accordingly 
         printf(" *  \n"); 
         break; 
        case 4: 
         // change the print accordingly 
         printf(" *  \n"); 
         break; 
       } 
      } 
      printf("\n"); 
     } 
    } 

} 

int sumOfDie(int inputArray[], int arraySize) 
{ 
    int i, sum=0; 
    for (i=0; i<arraySize; i++) 
    { 
     sum=sum+inputArray[i]; 
    } 
    return sum; 
} 



int main(void) 
{ 
    int i, sum; 
    int inputArray[5]; 
    srand(time(NULL)); 


    for(i=0; i<5; i++) 
    { 
     inputArray[i] = rand()%5+1; 
    } 

    for (i=0; i<5; i++) 
    { 
     printf("Number:%d\n", inputArray[i]); 
    } 

    drawDie(inputArray, 5); 

    sum = sumOfDie(inputArray,5); 
    printf("The sum of %i + %i + %i + %i + %i = %i", inputArray[0], inputArray[1], inputArray[2], inputArray[3], inputArray[4], sum); 
} 
+1

これはかなり恐ろしいもので、かなりバグです。 – sp2danny

関連する問題