2015-01-14 2 views
1

컴퓨터 과학 수업을위한 첫 번째 C++ 프로그램을 마쳤으며 딜레마에 빠져 있습니다. 문제는이 while 루프 문 내이며 이렇게되면 :정수 변수로 while 루프를 통해 유한 입력 값을 읽음

나는이 원하지 않는 행동을 얻을 명령 프롬프트에 기본적으로
int main() 
{ 
    int answer; 
    while(!(std::cin >> answer)) // runs until number is read 
    { 
     std::cin.clear(); 
     std::cin.ignore(); 
     std::cin >> answer; 
    } 
// rest of code 
    return 0; 
} 

:

사용자 입력 :

Q

(5)

처음 다섯 번째 (첫 번째 숫자)를 읽었을 때 프로그램이 끝났어야했으나 그렇지 않아 다시 작동하도록 입력하라는 메시지가 나타납니다.

+1

'ignore' (매개 변수없이)는 한 문자 만 무시합니다. 당신은 아마'std :: cin.ignore (somenumber, '\ n');'와 같은 것을 원할 것입니다. –

+1

while 루프 내부의 모든 것을 다시 생각해 볼 필요가 있다고 생각합니다. –

+0

사람이 편지를 입력하면 작동하지 않기 때문에 반복하고 싶습니다. – TakShing

답변

5

숫자를 읽으려면 while 루프 내부에 줄이 필요하지 않습니다. 가지고있을 때 5을 읽은 후에 다른 번호를 기다리고 있습니다.

while(!(std::cin >> answer)) 
{ 
    std::cin.clear(); 
    std::cin.ignore(); 

    // Remove this line. 
    // std::cin >> answer; 
} 

업데이트

EOF 처리하는 나쁜 입력이 발견 될 때 또한, 행의 나머지, 단지 하나 개의 문자를 무시하는 청소기 방법입니다.

+0

@MattMcNabb, 주심에 감사드립니다. –

관련 문제