Search

getline() 함수

생성일
2022/06/19 05:54
태그
C++

getline() 함수

getline 함수의 원형
cin.getline(char buf[], int size, char delimitChar) // buf : 입력받은 문자열을 저장할 배열 // size : buf[] 배열의 크기 // delimitChar : 문자열 입력 끝을 구분할 문자 // 일반적으로 변수 delimitChar가 생략되면 디폴트 값인 '\n'로 지정된다
C++
복사
getline 함수는 <istream>에 속한 cin.getline 함수와 <string>에 속한 getline 함수 이렇게 두 가지가 존재한다.

istream의 cin.getline() 함수

cin.getline(char str, streamsize n); cin.getline(char str, streamsize n, char delimiter); // C언어 스타일의 문자열을 입력 받을 때 사용 // 크기 n을 지정하면 (n-1)개의 문자를 읽어와 str 배열에 저장 (마지막은 null문자) // 지정한 delimiter를 만나기 전까지 모든 문자를 읽어서 str 배열에 저장 (디폴트 구분자는 개행문자)
C++
복사

string의 getline() 함수

getline(istream& is, string str); getline(istream& is, string str, char delimiter); // 입력 가능한 최대 문자 수를 지정하지 않아도 된다 // 지정한 delimiter를 만나기 전까지 모든 문자를 읽어서 string 객체에 저장
C++
복사

주의사항

cin 은 개행 문자를 버퍼에 그대로 남겨 두기 때문에, 아래 예시처럼 연이어서 바로 다음 입력을 받을 때 버퍼에 있던 개행 문자가 그대로 입력 되어버리는 문제가 발생한다
#include <iostream> using namespace std; int main() { char a[100], b[100], c[100]; cin >> a; // cin은 버퍼에 엔터가 남아있음. // getline 함수는 버퍼에 엔터 포함X cin.getline(b, 100); cin.getline(c, 100); cout << "a: " << a << endl; cout << "b: " << b << endl; cout << "c: " << c << endl; return 0; }
C++
복사

입력

Hello World

출력

a: Hello b: c: World
따라서, 연속 입력을 받을 때는 입력 버퍼를 비워주는 cin.ignore() 함수를 사용하여야 한다
#include <iostream> using namespace std; int main() { char a[100], b[100], c[100]; cin >> a; // cin은 버퍼에 엔터가 남아있음. cin.ignore(); // 입력 버퍼 비우기 // getline 함수는 버퍼에 엔터 포함X cin.getline(b, 100); cin.getline(c, 100); cout << "a: " << a << endl; cout << "b: " << b << endl; cout << "c: " << c << endl; return 0; }
C++
복사

입력

Hi
Hello World
Nice

출력

a: Hi b: Hello World c: Nice

ex2)

#include <iostream> #include <string> #include <vector> using namespace std; int main() { string message; getline(cin, message); cout << message.length()*2; }
C++
복사

reference