2012-04-02 4 views
2

다른 메뉴를 파생시키는 메뉴를 표시해야하며 다른 메뉴가 파생됩니다. 는하지만 난이 양식과 그 메뉴를 검증하고 있습니다 : (만 C 표준 라이브러리) 메뉴 유효성을 검사하는 것이 좋습니까?

do{ 
    validOption = 1; 
    printf("Option #1\n"); 
    printf("Option #2\n"); 
    printf("Option #3\n"); 
    scanf("%i",&option); 
    switch(option){ 
     case 1: /* Do something */ break; 
     case 2: /* Do something */ break; 
     case 3: /* Do something */ break; 
     default: validOption = 0; printf("Invalid Option\n"); break; 
    } 
}while(!validOption); 

그러나시

내가 option 변수 validOption 플래그 같은를 사용하는 경우 몰라요 메뉴를 유도. 나는 option 변수를 덮어 쓸 것입니다 그 option 변수가 특정 경우에 조인 유일한 목적으로 사용 되었기 때문에 내가 이전 option 변수를 필요가 없습니다 유도하기 때문에 그 문제가되지 않는다 생각합니다. 이제 validOption 플래그도 문제가되지 않습니다. 성공 사례가 발생하면 validOption = 1 (더 이상 반복하지 않음) 을 의미하며 값이 1 인 이전 validOption과 일치합니다 (사례에서 합쳐 졌기 때문에) . 그래서 방해하지 않을 것입니다.

파생 된 메뉴에서 동일한 변수 (option, validOption)를 사용하는 것이 좋습니다.

이라도 실용적인 방식으로 메뉴를 확인하는 것이 필요하다고 생각하면 getint() 함수로 유효성을 검사해야합니다.

#include<stdio.h> 
int main(){ 
    int option; 
    int validOption; 
    do{ 
     printf("Option #1\n"); 
     printf("Option #2\n"); 
     printf("Option #3\n"); 
     scanf("%i",&option); 
     switch(option){ 
      case 1: 
       validOption = 1; 
       do{ 
        printf("Option #1\n"); 
        printf("Option #2\n"); 
        printf("Option #3\n"); 
        scanf("%i",&option); 
        switch(option){ 
         case 1: validOption = 1; /* Another menu with the same option and validOption variables */ break; 
         case 2: validOption = 1; /* Do something */ break; 
         case 3: validOption = 1; /* Do something */ break; 
         default: validOption = 0; printf("Invalid Option\n"); break; 
        } 
       }while(!validOption); 
      break; 
      case 2: validOption = 1; /* Do something */ break; 
      case 3: validOption = 1; /* Do something */ break; 
      default: validOption = 0; printf("Invalid Option\n"); break; 
     } 
    }while(!validOption); 
    return 0; 
} 
//I've put validOption = 1; within all cases just for explaining purposes 

답변

1

차라리 파생보다가 중첩 루프 부를 것이다.

질문하시오 : 변수의 첫 번째 값이 더 이상 필요하지 않으면 루프 내에서 동일한 변수를 다시 사용할 수 있습니까? (귀하의 질문에 대한 답을 바꾸시겠습니까?)

예, 유효합니다. 기술적으로 잘못된 점은 없지만 아니요입니다. 왜냐하면 불필요한 혼동을 야기하고 코드 가독성을 특히 외부 루프 내 에서처럼 동일한 루프 내에서 어렵게 만듭니다. 코드 기반이 커짐에 따라 더 어려워집니다. 따라서 나는 그러한 코딩 실습을 권장하지 않을 것이다.

정수를 유효화하려면 다음과 같이하십시오. 값 (getint()) 만 전달하기 때문에 다른 변수를 사용하는 데 문제가 없습니다. option1option2

getint()에 값을 전달하여 유효성을 검사 할 수 있습니다.

+0

:) 내 영어로는 유감 스럽지만, 혼란 스럽습니다. 변수를 다시 사용하지 못했습니다 ... 감사합니다. – nEAnnam

+0

괜찮습니다. 나는 당신이 어쨌든 물어보고 싶은 것을 쉽게 이해했다 ;-) –

관련 문제