2014-05-23 6 views
-2

사용자 입력이 숫자인지 아닌지를 확인해야하는이 코드가 있는데 숫자인지 여부에 관계없이 "false"가 인쇄됩니다.사용자 입력이 숫자인지 확인하십시오.

if (isdigit(atoi(argv[1]))) 
{ 
    printf("true"); 
} 
else 
{ 
    print("false"); 
} 

이것은 내가 그것을 실행하는 방법이다 : 당신은 다른 기능을 혼동

./filename 2 3

답변

1

.

atoi() (ASCII에서 정수로)은 문자열을 int으로 변환합니다. 그러나 isdigit()int이 아닌 단일 문자를 검사합니다.

문자열의 첫 번째 문자를 확인하려면 isdigit((unsigned int) argv[1][0]) 만 있으면됩니다. 당신이 문자가없는 있는지 확인하려면

, 너무을 확인 : 당신은 atoi 필요하지 않습니다

bool single_digit(const char *s) 
{ 
    return s != NULL && isdigit((unsigned int) *s) && s[1] == '\0'; 
} 

다음

single_digit(argv[1]); 
+0

@PLPeeters 물론입니다. 문제의 코드는 다소 모호했습니다. 내가 편집 할게. – unwind

-1

를 호출합니다. 대신 정수로 변환하십시오.

if (isdigit((int)argv[1])) 
{ 
    printf("true"); 
} 
else 
{ 
    print("false"); 
} 

또한, 이와 같이하여 실행 ./filename 3 (즉, 단지 하나 개의 손가락을 파일명 후 두번째 무시되기 때문에).

가장 좋은 방법 : isdigit 및 기타 유사한 방법에 대한 확인 man page : http://linux.die.net/man/3/isdigit

관련 문제