2013-03-18 2 views
0

안녕하세요. C에서 switch 문을 사용하여 대화식 메뉴를 만들려고합니다. 특정 인수가있는 함수를 트리거하는 방법을 잘 모르겠지만. 저는 초보자입니다. 어떻게하는지 잘 모르겠습니다. switch 문에있는 함수는 숫자를 요구하는 함수를 원하지만 인수가 필요합니다. 저는 이것을 과제로하고 실제 코드를 제공 할 수 없으므로이 모형을 만들었습니다. 도와 줘서 고마워.switch 문을 사용하는 대화 형 메뉴

다음은 사용할 수있는 코드 예입니다.

#include <stdio.h> 

void printMenu() 
{ 
    int choice; 

    do 
    { 
     printf("Main Menu:\n"); 
     printf("1) do this\n"); 
     scanf("%d", &choice); 

     switch (choice) 
     { 
      case 1: 
       function(); /* though this needs the arguments */ 
       break; 
     } 
    } while (choice != 7); 

    int main(void) 
    { 
     printMenu(); 
     return 0; 
    } 

    void function(int number1, float number2) 
    { 
     /*calculation*/ 
     printf("enter your numbers"); 
     /* Not sure how to read the numbers in here */ 
     printf("%d + %d = %d", number1, number2, number1 + number2); 
     return; 
    } 
+0

거기에 질문이 있습니까? – Aiias

+2

이미 scanf()를 사용하고있는 것 같습니다. 귀하의 전화 번호를 다시 읽으려면이 번호를 사용하십시오. –

+0

BTW : printf에서 함수의 args 대 int/int에서 float가 일치하지 않음을 확인하십시오. – Scavokovich

답변

1

당신은 switch이 ...

case 1: 
    read_input_and_function() 
    break; 

... 

void read_input_and_function(void) 
{ 
    printf("Enter your numbers: "); 
    /* scanf number1, number2 */ 
    function(number1, number2); 
} 
+0

모듈로 모두 유지하려면 여기에서 수행 한 것처럼 스위치를 간단하게 kep하고 모든 코드를 유지해야합니다. 입력을 읽기위한 다른 함수를 생성하십시오. 이 예제에서 "void read_input_and_function (void)"을 만들지 않고 "void function"에서 수행 할 수 있습니까? –

+0

@GerardGrundy :'void function (int number1, float number2)'를'void function (void)'으로 변경하고 그 함수 안에 입력을 요구하지 않는 한. – AusCBloke

1

스위치 문에서 함수 그럼 그냥 입력에 소요하고 함수를 호출하는 다른 함수를 호출 가능한 한 최소화하려면 나는 함수가 숫자를 물어보기를 원하지만 인수가 필요하다.

인수를 먼저 물어보고 함수를 호출하는 방법은 어떻습니까? 이 방법으로 두 개의 인수를 한 번 선언하고 같은 스위치의 다른 함수에서 사용할 수 있지만 선택한 경우에 따라 정의 할 수 있습니다.

void function1(int, float); 

    void printMenu() 
    { 

    int choice = 0 , num1 = 0; 
    float num2 = 0; 

    do 
     { 
      printf("Main Menu:\n"); 
      printf("1) do this\n"); 
      scanf("%d", &choice); 

      switch (choice) 
      { 
       case 1: 
        printf("\nEnter number 1\n"); 
        scanf("%d",&num1); 
        printf("\nEnter number 2\n"); 
        scanf("%f",&num2); 
        function1(num1,num2); 
        break; 
      } 
     } while (choice != 7); 
    } 
+0

감사합니다. fgets로 스캔하는 법을 안다면 궁금한가요? –

+0

@GerardGrundy, 만약 문자열을 선언했다면 (예를 들어'char mystring [100];'), mystring으로 스캔하려면'fgets (mystring, 100, stdin)'을 사용할 것이고, 첫번째 매개 변수는 char 배열, 두 번째는 배열의 크기, 세 번째 매개 변수는 파일 포인터, 콘솔에서 읽으려는 파일 포인터는'stdin', 실제 파일에서 읽으려면 통과 시키십시오 그 파일 포인터의 이름은 여기에있다. –

-1
#include <stdio.h> 
#include <stdlib.h> 

#define Pi 3.14159216 

/* 
*small program of how to create a menu 
*/ 

main() 
{ 
float degree,radians; 
int input; 
/*degrees to radians */ 
float degreesToRadians (float deg) 
{ 
return ((Pi * deg)/180.0); 
} 

/*radians to degrees*/ 
float radiansToDegrees (float rad) 
{ 
return rad * (180/Pi); 
} 
void menu() 
{ 
printf ("\n"); 
printf ("1. degrees\n"); 
printf ("2. radians\n"); 
printf ("3. quit\n"); 
do 
switch (input) { 
case 1: 
      printf ("\n"); 
      printf ("\n"); 

      printf (" Enter value of degrees: "); 
      scanf ("%f", &degree); 
      printf ("RADIANS = %f \n\n", degreesToRadians (degree)); 
      menu(); 
      break; 

case 2: 
      printf ("\n"); 
      printf ("\n"); 

      printf (" Enter value of radians: "); 
      scanf ("%f", &radians); 
      printf ("DEGREES = %f \n\n", radiansToDegrees (radians)); 
      menu(); 
      break; 
case 3: 
      printf (" quiting app \n"); 
      exit (0); 
      break; 
default: 
     printf ("wrong option\n"); 
     break; 
    } 
while (input != 3); 
    getchar(); 
    } 
} 
menu(); 
}