본문 바로가기
공부기록/[Algorithm]

백준 10951번 <A+B - 4> - C++

by RiverWon 2024. 8. 2.

 

EOF(End-of-File)만 어떻게 처리하는 지 알면 풀 수 있는 문제이다.

 

C++에서는 cin.eof()로 eof를 판단하는데, 입력의 끝이면 true, 아니면 false를 반환한다.

마지막 문자를 읽고, 다시 한 번 더 읽었을 때 true가 반환된다.

 

우리는 입력값의 길이를 모른다!

 

char a;

while(!( cin >> a ).eof()){
	cout << a;
}

 

요렇게 하면 된다. 마지막 문자를 읽었을 때 더이상 없으면 cin.eof()에서 true가 반환되고, ! 때문에 조건문을 탈출하게 된다

 

더 간단하게는?

 

char a;

while(cin >> a) {
	cout << a;
}

스트림 연산을 한 뒤에는 스트림 객체를 반환한다. (그래서 (cin>>a).eof()같은 연산이 가능했던 것이다. ==  cin>>a를 하고 나면 정상상태일 때 cin이 반환돼서 결국 cin.eof()가 됨)

 

BUT! 스트림 연산이 조건문에 들어가면, 스트림 객체가 아니라 bool타입을 반환한다. 스트림이 정상상태일 때 True

EOF에 도달하면 false가 반환되는 것!

 

그래서 간결하게 나타낼 수 있는 것이다.

 

생각


eof만 알면, 다끝난다

#include <iostream>

using namespace std;

int main() {
    int a,b;
    while(cin >> a >> b){
        cout << a+b << '\n';
        a = 0;
        b = 0;
    }
    return 0;
}