EOF란 end of file의 약자이다
입력이 끝나는 여부를 판단하기 위해서는 cin.eof()를 사용할 수 있는데,
파일의 끝까지 읽은 뒤 다음 파일을 읽으려고 할 때 파일이 끝나 읽을 데이터가 없을 때 eof가 된다(true 반환)
* 입력 파일을 따로 생성해서 읽지 않는 경우, ctrl + z 키를 이용해 eof 상태를 전송해 줄 수 있다
string str;
while(!cin.eof())
{
getline(cin, str);
// Or
cin >> str;
}
위와 같은 방법으로 입력이 끝날 때까지 while문을 돌며 입력을 받도록 할 수 있다
혹은 아래와 같이 더 간결하게 변경할 수 있다
string str;
while (cin >> str)
{
cout << str << '\n';
}
* 당연하게도, cin >> a >> b >> c와 같이 여러 개의 입력을 받는 스트림 연산을 조건문에 넣어도 무방하다
// getline 헤더 파일
#include <string>
string str;
while (getline(cin, str))
{
cout << str << '\n';
}
기본적으로 스트림 연산 후에는 스트림 객체를 반환하는데, 스트림이 조건문 안에 들어가 있는 경우 bool 타입을 반환하게 된다(기본은 true, eof 등 정상이 아닌 상태인 경우 false를 반환)
따라서 입력 스트림을 while문 안에 넣으면 입력이 종료되어 EOF 전달과 동시에 false를 반환하게 되어 반복문이 자동으로 종료된다
+)
아래와 같이 입력 스트림을 조건문 안에 넣는 방식이 더 빠르다
eof 여부를 확인한 아래쪽 문제는 시간 초과였으나, 입력 스트림을 조건문 안에 넣는 방식으로 구현 시 시간 초과 에러가 뜨지 않는 것을 확인할 수 있다
'Programing > C++' 카테고리의 다른 글
[C++] lower_bound, upper_bound에 대하여(배열에서 key 위치 찾기) (0) | 2025.02.21 |
---|---|
[C++] Unique 함수에 대하여 (배열 내 중복 요소 제거하는 방법) (0) | 2025.02.21 |
[C++] 최대공약수(GCD), 최소공배수(LCM) 구하기 (0) | 2025.01.27 |
[C++] priority_queue (0) | 2025.01.23 |
[C++] 반올림, 올림, 내림, 소숫점 n번째 자리에서 반올림 (round, ceil, floor, fixed, precision) (0) | 2025.01.22 |