2013-10-16 2 views
1

이것은 hw입니다. 내 교수에게 왜 다음 코드가 while 루프를 빠져 나가지 않을지 물어 보았습니다. 그리고 그/그녀는 저에게 말할 수 없었습니다. 입력 스트림에 더 이상 읽을 값이 없으면 cin은 false 값을 반환하고 while 루프를 종료해야합니다. 내 것이 아닙니다. 루프를 통해 입력 값 (정수 집합)을 읽은 상태로 유지 한 다음 더 많은 입력을 기다리는 것 같습니다. 아무도 그 이유를 말할 수 있습니까? 아래는 코드입니다. cin 스트림을 확인하고 cin 파일의 문자 또는 오류의 종료가 발생하면 거짓이 같은cin의 LCV가있는 루프가 C++에서 종료되지 않습니다.

# include <iostream> 

using namespace std; 

int main() 
{ 
int iEvenSum = 0; 
int iOddSum = 0; 
int iNum; 

// prompt user 
cout << "Input any set of integers, separated by a space:\n"; 
cin >> iNum; 
cout << "You input: "; 

while (cin) 
{ 
    cout << iNum << " "; 

    if (iNum % 2 == 0) 
     iEvenSum = iEvenSum + iNum; 
    else 
     iOddSum = iOddSum + iNum; 

    cin >> iNum; 
} 

cout << "\n\nThe sum of Even numbers is " << iEvenSum << "." << endl; 
cout << "The sum of Odd numbers is " << iOddSum << "." << endl; 

return 0; 

} 
+0

루프를 멈추려 고 시도한 것은 무엇입니까? 입력을 멈추는 것만으로 아무것도 바뀌지 않을 것입니다 :'cin'은 다른 입력을 기다립니다. – Walter

답변

2

while(cin) 오래 참으로 남아있다.

귀하의 경우 while(cin)EOF 자 또는 오류가 발생할 때까지 계속해서 숫자를 읽습니다. 더 이상 입력 번호가 없을 때 Ctrl-D을 입력하면 while 루프를 종료해야합니다.

+0

두 가지 모두 입력 해 주셔서 감사합니다. 그것은 훨씬 더 의미가 있습니다. 따라서 정수가 아닌 정수로 정수를 끝내라는 메시지를 표시하면 int 변수에 저장되지 않으므로 EOF로 작동하여 오류 또는 거짓을 유발할 수 있습니다 (물론 원유 방식으로). – user2888226

+0

@ user2888226 네, 그렇습니다. – Kunal

관련 문제