2014-11-20 1 views
-1

오케이 그럼 C와는 새로운 것이므로 기본적으로 4 라운드의 테니스 토너먼트를 통해 사용자를 안내하는 프로그램을 작성했습니다. 프로그램은 마지막 함수 (FR)까지 완벽하게 작동합니다. 우승 한 숫자를 입력 한 후 프로그램이 R1로 바로 돌아갑니다. 어떻게 가능합니까? 최종 라운드 이후에 프로그램을 종료하려면 어떻게해야합니까?마지막 기능이 루프의 일부가 아니어도 프로그램이 루프 순환에 머물렀다

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

#define R1CONTESTANTS 16 
#define R2CONTESTANTS 8 
#define R3CONTESTANTS 4 
#define FRCONTESTANTS 2 
#define WINNER 1 


int main(void) 
{ 
    GetNames(); 
    R1(); 
    R2(); 
    R3(); 
    FR(); 
    return 0; 
} 

int GetNames() 
{ 
    char Name[R1CONTESTANTS][20]; 
    int n; 

    printf("Hello and Welcome to the 2014 Tennis Knockout Competition!\n"); 
    printf("Please enter the names of all 16 players (MAX 20 CHARACTERS): \n"); 
    /*Get Names loop*/ 
    for(n = 0; n < 16 ; n++) 
    { 
     printf("%d >>", n+1); 
     scanf("%20s", Name[n]); 
     fflush(stdin); 
    } 
    R1(Name); 
} 

int R1(char Name[][20]) 
{ 
    char R2Name[R2CONTESTANTS][20]; 
    int m, i; 
    int Winner[8]; 

    system("clear"); 
    printf("WELCOME TO ROUND 1! IT WILL CONSIST OF 8 MATCHES! GOOD LUCK!"); 
    for(m = 0, i = 0; m < 8 ; m++, i+=2) 
     { 
      printf("\nMatch %d of 8.\n", m+1); 
      printf("\n(1) %s v %s (2)\n", Name[i], Name[i+1]); 
      printf("\nWinner of Match %d(1/2): ", m+1); 
      scanf("%d", &Winner[m]); 
      fflush(stdin); 
      switch(Winner[m]) 
      { 
      case 1 : strncpy(R2Name[m], Name[i], 20);break; 
      case 2 : strncpy(R2Name[m], Name[i+1], 20);break; 
      default : printf("\nSomething went wrong. Please try again.\n");break; 
      } 
     } 
    R2(R2Name); 
} 

int R2(char R2Name[][20]) 
{ 
    char R3Name[R3CONTESTANTS][20]; 
    int m, i; 
    int R2Winner[4]; 

    system("clear"); 
    printf("WELCOME TO ROUND 2! IT WILL CONSIST OF 4 MATCHES! GOOD LUCK!"); 
    for(m = 0, i = 0; m < 4; m++, i+=2) 
     { 
     printf("\nMatch %d of 4.\n", m+1); 
     printf("\n(1) %s v %s (2)\n", R2Name[i], R2Name[i+1]); 
     printf("\nWinner of Match %d(1/2): ", m+1); 
     scanf("%d", &R2Winner[m]); 
     fflush(stdin); 
     switch(R2Winner[m]) 
      { 
      case 1 : strncpy(R3Name[m], R2Name[i], 20);break; 
      case 2 : strncpy(R3Name[m], R2Name[i+1], 20);break; 
      default : printf("\nSomething went wrong. Please try again.\n");break; 
      } 
     } 
    R3(R3Name); 
} 

int R3(char R3Name[][20]) 
{ 
    char FRName[FRCONTESTANTS][20]; 
    int m, i; 
    int R3Winner[2]; 

    system("clear"); 
    printf("WELCOME TO THE SEMI FINALS! GOOD LUCK!"); 
    for(m = 0, i = 0; m < 2; m++, i+=2) 
     { 
      printf("\nMatch %d of 2.\n", m+1); 
      printf("\n(1) %s v %s (2)\n", R3Name[i], R3Name[i+1]); 
      printf("\nWinner of Match %d(1/2): ", m+1); 
      scanf("%d", &R3Winner[m]); 
      fflush(stdin); 
      switch(R3Winner[m]) 
      { 
       case 1 : strncpy(FRName[m], R3Name[i], 20);break; 
       case 2 : strncpy(FRName[m], R3Name[i+1], 20);break; 
       default : printf("\nSomething went wrong. Please try again.\n");break; 
      } 
     } 
    FR(FRName); 
} 

int FR(char FRName[][20]) 
{ 
    int FRWinner; 
    char OWName[WINNER][20]; 

    system("clear"); 
    printf("YOU HAVE MADE IT TO THE FINAL ROUND! GOOD LUCK!"); 
    printf("\n\n(1) %s v %s (2)\n", FRName[0], FRName[1]); 
    printf("\nWinner of Match and Tournament(1/2): "); 
    scanf("%d", &FRWinner); 
    fflush(stdin); 
    switch(FRWinner) 
    { 
    case 1 : strncpy(OWName[0], FRName[0], 20);break; 
    case 2 : strncpy(OWName[0], FRName[1], 20);break; 
    default : printf("Something went wrong.");break; 
    } 

} 
+0

'fflush (stdin)'을 호출하지 마십시오. –

+0

저의 강사가 우리에게 입력하게하고, 그렇지 않으면 ill drop marks가 –

+1

int R3 (char R3Name [] [20]) 함수에 있지만 R3()로 호출하는 매개 변수는 전달하지 않습니다. 왜? –

답변

0

당신은 main에서 다시 다음 GetNames에서 R1를 호출하고 있습니다. 각 단계마다 후임을 호출하고 각 단계를 호출하는 main이 있습니다.

0

R1이 GetNames의 끝에서 호출되고 R2가 R1의 끝에서 호출되는 등의 이유로 main에서 R1(), R2() 등을 호출 할 필요가 없습니다.

0

코드가 약간 재미 있습니다. 메서드를 함께 연결하고 main에서 순서대로 호출하는 것처럼 보입니다.

따라서 현재 프로그램의 흐름은 다음과 같습니다.

GetNames() -> R1() -> R2() -> R3() -> FR() 
R1() -> R2() -> R3() -> FR() 
R2() -> R3() -> FR() 
R3() -> FR() 
FR() 

그리고 컴파일러가 혼란을 컴파일을 거부했다거나 그냥 바로 추락 경우 행복 사고 것 통과되지 매개 변수에 대한 전체 거래는있다.

이제 손에 위험한 물건이있는 것 같습니다.

관련 문제