2012-10-30 3 views
1

나는 2 개 개의 다른 질문는 2 개 개의 다른 질문

int validate(int low, int high) { 
    int flag = 0, number = 0; 

    do 
    { 
     printf("Enter maximum value between %d and %d: ", low, high); 
     scanf("%d", &number); 
     if (number <= low || number > high) 
     { 
      printf("INVALID! Must enter a value between %d and %d: ", low, high); 
      scanf("%d", &number); 
     } 
     else { 
      flag = 1; 
     } 
    } while(flag == 0); 
    return number; 
} 
를 사용하여, 2 개 개의 다른 번호 입력을 검증하기 위해, 동일한 기능 (검증)을 사용하는 방법을 알아 내려고에 문제가 있어요 유효성을 검사 같은 기능을 사용하여

는 여기에() 나는 두 번째 validate()를 호출하면 (num2를 반환)

int main() { 
    int num1, num2; 

    switch(menu()) { 
    case 1: 
    printf("~~~~~~~\n6/49 Number Generator\n"); 
    num1 = validate(1,49); 
    num2 = validate(1, 6); 
    break; 
    default: 
     printf("end"); 
    } 
return(0); 
} 

, 나는 숫자의 수량을 요청하는 데 필요한 주요이다.

어떤 도움

주시면 감사하겠습니다.

+1

귀하의 기능을 모두 수행 입력 및 검증 (혼자가 아닙니다 검증)입니다 사용할 수 있습니다. 입력 코드는'scanf()'가 성공했는지 확인해야한다. 그렇지 않으면해야 할 일을 결정해야합니다. 비대칭 테스트를 사용하는 이유는 분명하지 않습니다 ('if (number <= low || number> high)'); '<'를 사용하면 더 정상적 일 것입니다. "숫자의 양을 물어볼 필요가 있습니다."라는 말의 의미가 명확하지 않습니다. 숫자로 된 배열을 모으는 것이 필요하다면, 배열을 가득 채우는 두 번째 함수가 필요합니다. –

답변

1

validate()에는 실제로 수행 할 작업을 나타내는 다른 매개 변수가 있어야합니다. int validate(int low, int high, int type)과 같은 것입니다.

그런 다음 스위치를 켜서 다양한 작업을 수행하십시오. 그러나 유효성 검사가 너무 적절하지 않으므로 함수의 이름을 변경하는 것이 좋습니다. 예 : numGenEngine 여기서 type은 step1, step2 등을 나타냅니다.

함수 정의가 손상되지 않았다고 생각하면 정적 변수를 사용할 수 있습니다.

int validate(int low, int high) { 
    static int step = 0; 
    int flag = 0, number = 0; 

    if (step == 0) { 
     // the first thing 
    } else if (step == 1) { 
     // the other thing 
      // to reuse the function for the next set of operations 
      // reset step to -1 here 
    } 

    step++; 
    return number; 
} 
2

이 기능 서명으로 제한하는 경우는 내부 정적 플래그

관련 문제