2014-11-14 2 views
-1

숫자를 입력하고 isdigit으로 테스트하면 항상 false를 반환합니다. 이유는 무엇입니까?isdigit()가 작동하지 않습니까?

#include <iostream> 

using namespace std; 
int main() { 

    int num; 

    cin >> num; 

    if(isdigit(num)) 
    cout << "Is a number"; 

    else 
    cout << "That is not a number"; 

} 

샘플 입력 : 1 isdigit의 의도는 그것이 ASCII 숫자인지 여부에 대한 문자을 확인하는 것입니다 때문입니다

답변

2

.

if (isdigit('4')) { 
    // yep 
} 

또는 : : 예를 들어 입력이 '0''9' 사이 인 경우

std::string str = "12345"; 
if (std::all_of(str.begin(), str.end(), isdigit)) { 
    // ok this is safe 
    int i = std::stoi(str); 
} 

그것은 기본적으로 확인됩니다. 어떤 말인가, 48과 57. 그것은 다른 어떤 값이라도 0을 돌려 줄 것입니다.

+0

두 번째 예제에는 정의되지 않은 동작이 있으며 일반적으로 어쨌든 컴파일되지 않습니다. –

+1

@JamesKanze clang과 gcc 모두에서 나를 컴파일하고 정의되지 않은 동작은 무엇입니까? – Barry

+0

@ 배리 : 글쎄, 당신은')'이 빠졌고'...'는 유효하지 않습니다. 'std'의 문자가 <0이면'isdigit' 호출은 UB입니다. 'str'은'char'을 포함하고 있지만'isdigit'는 유효한'unsigned char' 표현이 필요합니다. 현실적으로, 당신이이 문제에 부딪 힐 것이라는 말은 정말 미안합니다. –

관련 문제