반응형
getline()
C++에서 getline과 cin은 둘 다 입력을 받는 데 사용되는 기능이지만, 그들 간에 중요한 차이점이 있다.
- cin:
- cin은 표준 입력 스트림(주로 키보드 입력)에서 데이터를 읽는 데 사용됨.
- cin을 사용하면 공백 문자(스페이스, 탭, 개행)를 기준으로 데이터를 구분.
- 예를 들어, **cin >> 변수**를 사용하면 사용자가 공백 문자를 입력할 때까지 변수에 데이터를 읽는다
#include <iostream>
using namespace std;
int main() {
int num;
cin >> num; // 사용자로부터 숫자를 입력받음
return 0;
}
- getline
- getline은 특정 입력 스트림에서 한 줄의 문자열을 읽는 데 사용됨.
- getline은 줄 바꿈 문자('\\n')를 만날 때까지 모든 문자를 읽는다.
- 공백 문자도 문자열로 취급하여, 사용자가 스페이스나 탭을 입력해도 문자열로 읽는다.
#include <iostream>
int main()
{
std::string str;
getline(std::cin, str);
std::cout << str << std::endl;
}
차이점
- cin은 데이터를 공백 문자로 구분하여 여러 변수로 읽을 때 유용
- getline은 한 줄 전체를 문자열로 읽을 때 유용합니다.
- 선택은 사용하려는 입력 데이터의 형식에 따라 달라짐.
getline → EOF처리
getline 함수를 사용하여 EOF(End of File)를 처리하려면, getline 함수가 EOF를 감지할 때 반환하는 값을 이용하여 루프를 제어해야한다. getline 함수는 입력 스트림에서 한 줄을 읽을 때 오류 없이 읽었다면 cin과는 다르게 EOF를 만나면 getline 함수는 false를 반환한다.
EOF를 처리하는 예제:
#include <iostream>
#include <string>
using namespace std;
int main() {
string line;
// getline 함수가 EOF를 만날 때까지 계속 읽는다다.
while (getline(cin, line)) {
cout << "입력된 문자열: " << line << endl;
}
// EOF를 만났을 때 루프를 종료하고 프로그램을 종료.
if (cin.eof()) {
cout << "EOF를 만났습니다." << endl;
} else {
cout << "입력 오류 또는 다른 오류가 발생했습니다." << endl;
}
return 0;
}
이 코드는 사용자가 입력을 계속하고 Enter 키를 누를 때마다 한 줄씩 출력합니다. 사용자가 Ctrl+D (Unix 및 Linux) 또는 Ctrl+Z (Windows)를 눌러 EOF를 보내면, getline 함수는 false를 반환하고 루프가 종료돰. 그런 다음 cin.eof()를 사용하여 EOF를 확인해도됨.
주의: EOF를 감지하기 위해 cin.eof()를 사용하는 것은 C++의 입력 루프에서 일반적인 패턴이지만, 입력 오류 또는 다른 예외 상황을 처리하려면 추가적인 오류 검사가 필요.
이런 코드도 가능
std::getline(std::cin, str);
if (std::cin.fail())
return (0);
fail이 EOF말고도 이상한 값을 다 처리해줌
반응형