2017-04-21 2 views
-3

9 개의 함수가 더 많이 호출되는 주요 함수가 있습니다. 내 목적이 무엇인지 이해하기 위해 다른 기능을 보여 드리겠습니다. 기능 check_draw의 문이 True 인 경우while while break while loop

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 '는 main에있는 것과는 다른'newgame'의 복사본을 가지고 있기 때문에. true/false (1/0) 값을 리턴하고 main에서'if (checkDraw (B)) break;를 수행하면'check_draw' (및 다른 유사한 함수)를 사용하는 것이 더 나을 것입니다. – 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; 
    } 
} 

당신이 메인이 아닌 다음 newgame = 10;check_draw 내에서 함수가 글로벌 newgame의 값을 변경합니다 check_draw 함수 내에서 로컬 복사본을 외부 int newgame;를 작성하는 경우

.

0

newgame 변수는 함수 check_draw 다시정의, 그래서 main가 액세스 할 수없는 check_draw로컬 복사본이다. 변수 rowscolumns 올바르게 선언하고 여기에 표시되지 코드의 일부에 초기화되는 것을 가정하면

는, 하나 개의 솔루션은 'main에의 값과의 선언을 삭제'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; 
} 

또 다른 해결책은 check_draw에 선언을 main의 변수 newgame 포인터 등을 전달하고 삭제하는 것입니다 :

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.