2016-11-07 1 views
0

초보자를 C로 지정하고 강좌에 과제를 지정합니다. 내가 고쳐야 할 필요가 있다고 생각되는 것을 고쳤지만 나의 메뉴는 A, B, C, D가 아닐 뿐이다. 괜찮아 질 것이다. 오류가 없으며 내 코드에 무엇이 문제가 있는지 궁금합니다.메뉴로 구동되는 프로그램 만들기, 오류

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#define PAUSE system("pause") 
#define CLS system("cls") 
#define FLUSH flush() 

// Prototype Functions Here 
void highestNumber(int, int, int); 
void lowestNumber(int, int, int); 
void displayAverage(int, int, int); 
void displayMenu(); 
void flush(); 
char getUserChoice(); 

main() { 
    char userSelection; 
    int number1 = 0, number2 = 0, number3 = 0; 
    do { 
     userSelection = getUserChoice(); // Gets/DisplaysMenu 
     switch (userSelection) { 

     case 'A': // Enter a number 
      printf("Enter a number 1: "); 
      scanf("%i", &number1); 

      printf("Enter a number 2: "); 
      scanf("%i", &number2); 

      printf("Enter a number 3: "); 
      scanf("%i", &number3); 
      break; 

     case 'B': // Display Highest Number Entered 
      printf("In Case B"); 
      highestNumber; 
      break; 

     case 'C': // Display Lowest Number entered 
      printf("In Case C"); 
      lowestNumber; 
      break; 

     case 'D': // Display Average of Numbers entered 
      printf("In Case D"); 
      displayAverage; 
      break; 

     case 'Q': // Quit the program 
      printf("You have quit the program\n"); 
      PAUSE; 
      break; 
     default: // Invalid Selection 
      printf("Invalid selection...try again!\n"); 
      PAUSE; 
      break; 
     } // end switch 
    } while (userSelection != 'Q'); 
    PAUSE; 
} // end of main 
    //============== 

void highestNumber(int number1, int number2, int number3) { 
    if (number1 > number2 && number1 > number3) { 
     printf("The highest number is: %i", number1); 
    } 

    else if (number2 > number1 && number2 > number3) { 
     printf("The highest number is: %i", number2); 
    } 
    else if (number3 > number2 && number3 > number1) { 
     printf("The highest number is: %i", number3); 
    } 
} //end highest number 

void lowestNumber(int number1, int number2, int number3) { 
    if (number1 < number2 && number1 < number3) { 
     printf("The lowest number is: %i", number1); 
    } 

    else if (number2 < number1 && number2 < number3) { 
     printf("The lowest number is: %i", number2); 
    } 
    else if (number3 < number2 && number3 < number1) { 
     printf("The lowest number is: %i", number3); 
    } 
} // end lowest number 

void displayAverage(int number1, int number2, int number3) { 
    int average = (number1 + number2 + number3)/3; 
    printf("The average of the three numbers you entered is: %i", average); 
} // display average 

void displayMenu() { 
    CLS; 
    printf("\n===============================\n"); 
    printf("========== MAIN MENU ==========\n"); 
    printf("===============================\n"); 
    printf("A. Enter a number\n"); 
    printf("B. Display Highest Number entered\n"); 
    printf("C. Display Lowest Number entered\n"); 
    printf("D. Display Average of Numbers entered\n"); 
    printf("Q. Quit the program\n"); 
    printf("Enter your choice: "); 
} // end displayMenu 

void flush() { 
    while (getchar() != '\n'); 
} // end flush 

char getUserChoice() { 
    char result; 
    displayMenu(); 
    scanf("%c", &result); FLUSH; 
    result = toupper(result); 
    return result; 
} // end getUserChoice 
+1

'enterNumber (int, int, int)'함수에 3 개의 매개 변수가 필요하다고합니다. 매개 변수가 0 인 함수를 호출하는'enterNumber();' 문제를 보시겠습니까? 다른 함수 정의 및 호출과 동일합니다. – kaylum

+0

그걸 알지만, 어떻게해야합니까? put enterNumber (int, int, int); 입력하십시오. 그 사건에 대해서도? – Jake

+0

매개 변수가없는 프로토 타입 함수의 경우 괄호 사이에'void '를 넣으십시오. 그렇지 않으면 실제로 프로토 타입이되는 것은 어떤 수의 매개 변수를 가질 수있는 함수입니다. – user3629249

답변

0

다음 코드는 원하는대로 수행해야합니다.

경고 : 당신이 getchar()

을 수행하기 전에 3 개 개의 숫자를 입력해야합니다 같이 다음 코드는 제약 조건의 수가를 구축했다로 전화 주석을 해제 등을 수정하고 싶은 몇 가지 세부 사항이있을 수 있습니다 그 숫자들에 대한 조작.

다음 코드는 셸에 대한 휴대용이 아닌 호출을 사용하지 않습니다.

데이터는 main() 함수에서 로컬로 유지되고이를 필요로하는 각 하위 함수로 전달됩니다.

데이터를 변경하는 함수는 데이터에 대한 포인터를 전달하므로 하위 함수가 해당 데이터를 변경할 수 있습니다. flush()은 명확성을 위해 이름이 바뀌 었 등이

해당 오류가

추가 확인

허용하는 flushStdin()을 확장 불필요한 if()

을 주석 무엇에 :

쓸모 매크로 기능

을 제거했다 EOF 또는 '\ n'중 하나임

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 


// Prototype Functions Here 
void enterNumber (int*, int*, int*); // pass address so function can update 

void highestNumber (int, int, int); 
void lowestNumber (int, int, int); 
void displayAverage(int, int, int); 

void displayMenu (void); // corrected prototypes 
void flushStdin (void); 
char getUserChoice (void); 



int main(void)   // only two valid signatures for main() 
         // this is one of them 
{ 
    char userSelection; 

    int number1;   // added local data variables 
    int number2; 
    int number3; 

    int gotSelections = 0; // so cannot try to work with uninitialized data 

    do 
    { 
     userSelection = getUserChoice(); // Gets/DisplaysMenu 
     switch (userSelection) 
     { 

     case '1': // Enter a number 
      enterNumber(&number1, &number2, &number3); // pass expected parameters 
      gotSelections = 1; 
      break; 

     case '2': // Display Highest Number Entered 
      if(gotSelections) 
      { // then data initialized 
       highestNumber(number1, number2, number3); // pass expected parameters 
      } 

      else 
      { // else tried to pass unitialized data 
       printf("must enter numbers before gathering Statistics\n"); 
      } 
      break; 

     case '3': // Display Lowest Number entered 
      if(gotSelections) 
      { // then data initialized 
       lowestNumber(number1, number2, number3); // pass expected parameters 
      } 

      else 
      { // else tried to pass unitialized data 
       printf("must enter numbers before gathering Statistics\n"); 
      } 
      break; 

     case '4': // Display Average of Numbers entered 
      if(gotSelections) 
      { // then data initialized 
       displayAverage(number1, number2, number3); 
      } 

      else 
      { // else tried to pass unitialized data 
       printf("must enter numbers before gathering Statistics\n"); 
      } 
      break; 

     case 'Q': // Quit the program 
      printf("You have quit the program\n"); 
      //system("pause"); 
      break; 

     default: // Invalid Selection 
      printf("Invalid selection...try again!\n"); 
      //system("pause"); 
      break; 
     } // end switch 
     flushStdin(); 
     //getchar(); 
    } while (userSelection != 'Q'); 

    //system("pause"); 
    //flushStdin(); 
    getchar(); 
} // end of main 


void enterNumber(int * pNumber1, int *pNumber2, int *pNumber3) 
{ 
    printf("Enter a number 1:\n "); 
    if(1 != scanf("%i", pNumber1)) 
    { 
     fprintf(stderr, "scanf for number1 failed"); 
     flushStdin(); 
     getchar(); 
     exit(EXIT_FAILURE); 
    } 

    printf("Enter a number 2:\n "); 
    if(1 != scanf("%i", pNumber2)) 
    { 
     fprintf(stderr, "scanf failed for number2"); 
     flushStdin(); 
     getchar(); 
     exit(EXIT_FAILURE); 
    } 

    printf("Enter a number 3:\n "); 
    if(1 != scanf("%i", pNumber3)) 
    { 
     fprintf(stderr, "scanf for number3 failed"); 
     flushStdin(); 
     getchar(); 
     exit(EXIT_FAILURE); 
    } 
} //end enter number 


void highestNumber(int number1, int number2, int number3) 
{ 
    if (number1 > number2 && number1 > number3) 
    { 
     printf("The highest number is: %i\n", number1); 
    } 

    else if (number2 > number1 && number2 > number3) 
    { 
     printf("The highest number is: %i\n", number2); 
    } 

    else //if (number3 > number2 && number3 > number1) 
    { 
     printf("The highest number is: %i\n", number3); 
    } 
} //end highest number 


void lowestNumber(int number1, int number2, int number3) 
{ 
    if (number1 < number2 && number1 < number3) 
    { 
     printf("The lowest number is: %i\n", number1); 
    } 

    else if (number2 < number1 && number2 < number3) 
    { 
     printf("The lowest number is: %i\n", number2); 
    } 

    else //if (number3 < number2 && number3 < number1) 
    { 
     printf("The lowest number is: %i\n", number3); 
    } 
} // end lowest number 


void displayAverage(int number1, int number2, int number3) 
{ 
    int average = (number1 + number2 + number3)/3; 
    printf("The average of the three numbers you entered is: %i\n", average); 
} // display average 


void displayMenu() 
{ 
    //system("cls"); 
    puts("\033[H \033[J"); // \033 is octal value for 'escape' 
    printf("\n===============================\n"); 
    printf("========== MAIN MENU ==========\n"); 
    printf("===============================\n"); 
    printf("1. Enter a number\n"); 
    printf("2. Display Highest Number entered\n"); 
    printf("3. Display Lowest Number entered\n"); 
    printf("4. Display Average of Numbers entered\n"); 
    printf("Q. Quit the program\n"); 
    printf("Enter your choice: "); 
} // end displayMenu 


void flushStdin() 
{ 
    int ch; 
    while ((ch = getchar()) != EOF && '\n' != ch); 
} // end flush 


char getUserChoice() 
{ 
    char result; 

    displayMenu(); 

    if(1 != scanf(" %c", &result)) 
    { 
     fprintf(stderr, "scanf for menu entry failed"); 
     flushStdin(); 
     getchar(); 
     exit(EXIT_FAILURE); 
    } 

    flushStdin(); 
    //getchar(); 
    result = (char)toupper((int)result); 

    return result; 
} // end getUserChoice 
관련 문제