2012-11-25 3 views
0

나는 사용자가 정수를 입력했는지 여부를 테스트해야하는이 코드 스 니펫을 가지고 있습니다. 사용자가 글자를 입력했지만 십진수는 입력하지 않으면 작동합니다. 왜 그런지 궁금합니다. 여기 내 코드입니다 :코드 조각은 특정 케이스에서 작동하지만 예상대로 작동하지 않는 이유는 무엇입니까?

Student student; 
int id; 

while(!(cin >> id)) 
{ 
    cout << "\nERROR: Please enter a Positive Whole Number" << endl; 
    cin.clear(); 
    cin.ignore(); 
    cout << "Enter Student ID: "; 
} 

A를 입력하면이 while 루프를 반복 할 것입니다,하지만 난 12.5를 입력하면 그것은 while 루프를 중퇴하고가는 유지합니다. 그것이 정수로 파싱되는지 아닌지를 테스트하지 않습니까? 문자가 아닌 12.5을받는 이유는 무엇입니까?

답변

1

cin>>id는 한 그것 (이 경우, "12")를 int로 변환 할 수 있습니다뭔가를 발견으로 성공합니다. 변환 할 수없는 항목에 도달하면 중지되지만, 이미 읽은 경우 int이면 성공으로 계산됩니다.

당신은 다음 문자열로 입력 한 줄을 읽어 std::getline를 사용하여 같은 일을 할 사람들은 모든 숫자가 있는지 여부를 테스트하기 위해 std::isdigit을 사용할 수 있습니다, 그것을 읽고 모든이 자리 것을 확인하십시오. int (자체)으로의 변환을 테스트하면 정수로 읽을 수있는 내용을 찾았지만 int으로 변환 할 수없는 다른 내용이 있는지 알려주지 않습니다.

+0

'isdigit()'시도를 보았습니다.하지만 새로운 솔루션을 찾기 시작하면서 12.5의 실제 인스턴스가 계속 나타납니다. 감사하지만 다시 시도 할 것입니다! –

+0

123abc 등을 허용하지 않는'boost :: lexical_cast'도 시도해 볼 수 있습니다. – chris

관련 문제