Programing/C++

[C++] 입력이 더 이상 안 들어올 때까지 입력 받기(cin.eof, getline)

hye3193 2025. 1. 22. 11:03

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';
}
// getline 헤더 파일
#include <string>

string str;
while (getline(cin, str))
{
    cout << str << '\n';
}

기본적으로 스트림 연산 후에는 스트림 객체를 반환하는데, 스트림이 조건문 안에 들어가 있는 경우 bool 타입을 반환하게 된다(기본은 true, eof 등 정상이 아닌 상태인 경우 false를 반환)

 

따라서 입력 스트림을 while문 안에 넣으면 입력이 종료되어 EOF 전달과 동시에 false를 반환하게 되어 반복문이 자동으로 종료된다