C++/C++ 라이브러리

getline(), cin()

재윤 2023. 11. 30. 14:32
반응형

getline()

C++에서 getline과 cin은 둘 다 입력을 받는 데 사용되는 기능이지만, 그들 간에 중요한 차이점이 있다.

  1. cin:
    • cin은 표준 입력 스트림(주로 키보드 입력)에서 데이터를 읽는 데 사용됨.
    • cin을 사용하면 공백 문자(스페이스, 탭, 개행)를 기준으로 데이터를 구분.
    • 예를 들어, **cin >> 변수**를 사용하면 사용자가 공백 문자를 입력할 때까지 변수에 데이터를 읽는다
#include <iostream>
using namespace std;

int main() {
    int num;
    cin >> num; // 사용자로부터 숫자를 입력받음
    return 0;
}

 

  1. 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말고도 이상한 값을 다 처리해줌

 

 

[C++] cin, getline 함수로 입력 받기

 

[C++] cin, getline 함수로 입력 받기

공백을 포함한 문자열 입력 받기

velog.io

 

반응형

'C++ > C++ 라이브러리' 카테고리의 다른 글

replace()  (2) 2023.11.30
stoi()  (2) 2023.11.30
isdigit()  (0) 2023.11.30
setw()  (2) 2023.11.30
toupper()  (0) 2023.11.30