-
[C++] EOF(End Of File) 처리하기Programming Language/C++ 2021. 11. 23. 13:10
EOF란?
End Of File의 약자로, 파일의 끝 또는 종료를 의미한다.
흔히 소스코드를 빌드 후 프롬프트 창에서 실행한 것 또한 파일의 실행이므로, 프로그램 종료 또는 무한루프 탈출 조건으로 EOF를 쓰기도 한다.
EOF 입력 방법
- 윈도우 - Control + z
- Mac/Unix - Control + d
C++ EOF 처리 방법
1. cin.eof()
cin.eof()는 eofbit를 검사해서 마지막 입력값에 다다랐으면 true를, 그렇지 않으면 flase를 반환한다.
(ref: https://www.cplusplus.com/reference/ios/ios/eof/)
#include <iostream> using namespace std; int main(){ int a, b; while(1){ cin >> a >> b; if(cin.eof()) break; else cout << a+b << endl; } return 0; }
2. >> 연산자의 반환 값을 이용
#include <iostream> using namespace std; int main() { int a, b; while (cin >> a >> b) { // int형 변수 a와 b에 int형이 아닌 입력값이 들어오면, false를 반환 cout << a + b << "\n"; } return 0; }
여기서 cin >> a >> b가 어떻게 조건으로서 작동되는지 찾아보았다.
https://stackoverflow.com/questions/6791520/if-cin-x-why-can-you-use-that-condition
if (cin >> x) - Why can you use that condition?
I have been using "Accelerated C++" to learn C++ over the summer, and there's a concept which I don't seem to understand properly. Why is int x; if (cin >> x){} equivalent to cin >>...
stackoverflow.com
완벽하게 이해하진 못했지만 대충 정리해보자면,
1. >> 연산자는 stream으로 부터 값을 읽어서 타겟 변수(cin)에 값을 반환한다.
2. 이 때 stream에서 읽은 값이 타겟 변수의 type이 아니라면, stream은 invalid 상태로 mark된다.
3. >> 연산자가 stream의 참조값(reference)을 cin에 반환하면, cin은 자신이 상속하는 istream 클래스의 explicit operator bool()로 인해 valid 상태의 stream은 true로, invalid 상태의 stream은 false로 변환하여 반환한다.
즉, 주석에 써놓은 것처럼, cin >> (변수)는 입력값으로 잘못된 값(자료형 불일치)이 들어오면 false를 반환한다는 얘기다.
'Programming Language > C++' 카테고리의 다른 글
[C++] 자릿수에 따라 다르게 처리하기 (0) 2021.11.26