2017-04-21 5 views
-3

ここに9つの関数が呼び出される主な関数があります。私はあなたの目的が何であるかを理解するために別の機能を紹介します。関数check_draw内のステートメントがTrueの場合ループ中にブレークアウト

int main() { 
    char B[rows][columns]; 
    char answer; 
    int newgame; 
    printf("Are you ready to play? Answer with y (or Y) for yes or n (or N) for no\n"); 
    scanf("\n%c",&answer); 
    while(answer!='N' && answer!='n'){ 
     fillArray(B); 
     printArray(B); 
     answer='y'; 
     while(answer!='N' && answer!='n'){ 
      vasilhs(B); 
      printArray(B); 
      check_draw(B);//I will place an if statement after the check_draw function 
      check_vertical_win(B); 
      check_horizontal_win(B); 
      check_right_diagonal_win(B); 
      check_left_diagonal_win(B); 
      antipalos_paikths(B); 
      printArray(B); 
      check_draw(B); 
      check_vertical_win(B); 
      check_horizontal_win(B); 
      check_right_diagonal_win(B); 
      check_left_diagonal_win(B); 
     } 
     printf("Do you want to play again?\n"); 
     scanf("\n\n%c",&answer); 
    } 
    }//end of main function 
    //function check_draw 

    void check_draw(char A[rows][columns]){ 
    int i,j; 
    int newgame; 
    //if statement will check in an matrix if the following elements are equal to '-' 
    if(A[0][0]!='-' && A[0][1]!='-' && A[0][2]!='-' && A[0][3]!='-' && A[0][4]!='-' && A[0][5]!='-' && A[0][6]!='-'){ 
     printf("The result is a draw"); 
     newgame=10; 
    } 
} 

だから変数newgameは値10

if(newgame==10){ 
    break; 
} 
を取得するときに

の文check_drawコールの後ならば、私はこれを配置する場合、それは破壊されないのはなぜ、 whileループ?あなたのコードの実装から

+0

ある関数のローカル変数に直接アクセスすることはできません。 – CinCout

+0

'check_draw'は' newgame'の_own_コピーを持っているので、mainのものとは異なります。 'check_draw'(と他の同様の関数)を真/偽(1/0)の値に戻し、メインで' if(checkDraw(B))break; 'を実行する方が良いでしょう。 – TripeHound

+0

'rows'と' columns'はどこに定義されていますか? – Marievi

答えて

0

void check_draw(char A[rows][columns]){ 
    int i, j; 
    int newgame; 
    //if statement will check in an matrix if the following elements are equal to '-' 
    if (A[0][0] != '-' && A[0][1] != '-' && A[0][2] != '-' && A[0][3] != '-' && A[0][4] != '-' && A[0][5] != '-' && A[0][6] != '-'){ 
     printf("The result is a draw"); 
     newgame = 10; 
    } 
} 

int newgameここではcheck_draw関数のローカルコピーです。

同じ名前の別の変数がグローバル変数として存在する場合は、int newgamecheck_draw関数内に宣言しないでください。これはローカルコピーを使用して動作します。

勧告:

int newgame;// Write it outside main 
void check_draw(char A[rows][columns]){ 
    int i, j; 
    //if statement will check in an matrix if the following elements are equal to '-' 
    if (A[0][0] != '-' && A[0][1] != '-' && A[0][2] != '-' && A[0][3] != '-' && A[0][4] != '-' && A[0][5] != '-' && A[0][6] != '-'){ 
     printf("The result is a draw"); 
     newgame = 10; 
    } 
} 

あなたがメインの外int newgame;を書き、check_draw関数内の任意のローカルコピーを作成していない場合は、check_draw関数内newgame = 10;文はグローバルnewgameの値を変更します。

0

変数newgameは機能check_drawに再びを定義し、それはmainへのアクセス権を持っていないcheck_drawローカルコピーです。変数rowscolumnsが正しく宣言され、ここに示されていないコードの一部に初期化されると仮定すれば

は、1つの解決策は、「mainにsの値として宣言を削除 "newgameを返す主なことです:

int main() { 
    char B[rows][columns]; 
    char answer; 
    int result; 
    printf("Are you ready to play? Answer with y (or Y) for yes or n (or N) for no\n"); 
    scanf("\n%c",&answer); 
    while(answer!='N' && answer!='n'){ 
     fillArray(B); 
     printArray(B); 
     answer='y'; 
     while(answer!='N' && answer!='n'){ 
      result = check_draw(B); 
     } 
     printf("Do you want to play again?\n"); 
     scanf("\n\n%c",&answer); 
    } 
    }//end of main function 
    //function check_draw 

    int check_draw(char A[rows][columns]){ 
    int i,j; 
    int newgame = -1; 
    //if statement will check in an matrix if the following elements are equal to '-' 
    if(A[0][0]!='-' && A[0][1]!='-' && A[0][2]!='-' && A[0][3]!='-' && A[0][4]!='-' && A[0][5]!='-' && A[0][6]!='-'){ 
     printf("The result is a draw"); 
     newgame=10; 
    } 
    return newgame; 
} 

別の解決策は、ポインタとしてmainの変数newgameを渡し、check_drawで宣言を削除するであろう:

int main() { 
    char B[rows][columns]; 
    char answer; 
    int newgame; 
    printf("Are you ready to play? Answer with y (or Y) for yes or n (or N) for no\n"); 
    scanf("\n%c",&answer); 
    while(answer!='N' && answer!='n'){ 
     fillArray(B); 
     printArray(B); 
     answer='y'; 
     while(answer!='N' && answer!='n'){ 
      check_draw(B, &newgame); 
     } 
     printf("Do you want to play again?\n"); 
     scanf("\n\n%c",&answer); 
    } 
    }//end of main function 
    //function check_draw 

    void check_draw(char A[rows][columns], int *newgame){ 
    int i,j; 
    //if statement will check in an matrix if the following elements are equal to '-' 
    if(A[0][0]!='-' && A[0][1]!='-' && A[0][2]!='-' && A[0][3]!='-' && A[0][4]!='-' && A[0][5]!='-' && A[0][6]!='-'){ 
     printf("The result is a draw"); 
     *newgame = 10; 
    } 
} 

this linkは、ローカル変数の範囲でお読みください。また、hereを見てください。

関連する問題