2017-05-09 1 views
1

사용자가 정수 값만 명령 줄에서 getopt 옵션으로 전달했는지 확인하는 방법은 무엇입니까? 사용자는 양의 정수 값만 전달해야합니다.정수 값과 음수에 대한 getopt 오류 처리

Isdigit() 함수가 제대로 작동하지 않습니다.

   case 's' : 
        flags=1; 

        start = atoi(optarg); 

시작에 정수 값만 포함되어 있는지 확인하는 방법은 무엇입니까? 내가 atoi 함수 기능을 사용하고 있기 때문에 0으로 기본의 복용의 값으로

   ./prog -scf 

는 임의의 문자가 입력 될 때 CF가 전달됩니다 여기에 실제로 오류를 제공해야합니다.

심지어는 strtol()을 시도했지만 아무 소용

  start = (int) strtol(optarg, &ptr, 10); 

내가 strtol 함수() 함수를 사용하는 경우에도, 그것은 숫자와 문자열을 모두 통과하는 경우에만 작동합니다.

여기서 다시 시작은 0을 취하고 전세 만 전달됩니다! 하지만 사용자 자체가 0을 전달하면 오류를 어떻게 처리 할 수 ​​있습니까? 당신이 서명 숫자 작업으로

  eg ./prog -s0  --> s takes 0 value, valid 

      eg ./prog -sabc  --> s takes 0 value , but invalid 
+0

'(시작 <0) {...} 경우;'? –

+0

"*가 제대로 작동하지 않음 *"이란 무엇을 의미합니까? – cdarke

+0

참조 : [** 최소, 완전하고 검증 가능한 예제를 만드는 방법 **] (http://stackoverflow.com/help/mcve). –

답변

0

,이 수행해야합니다

if (optarg[0] != '-' && (optarg[0] < '0' || optarg[0] > '9')) 
    *error handling* 
for (size_t i = 1; optarg[i] != 0; i++) 
    if (optarg[i] < '0' || optarg[i] > '9') 
     *error handling*