기본적으로 cin을 이용한 입력을 받지만, “Hello World” 처럼 띄어쓰기가 포함된 문장이라면 Hello까지만 읽게됨.

cin의 » 연산자에서 공백문자를 구분자로 하여 입력을 끊기 때문에 그런것인데, 이를 해결하기 위한 방법을 소개함.


getline

헤더파일

#include<string>


사용법

getline(입력스트림 오브젝트, 문자열을 저장할 string 객체, 구분자)
    //구분자를 입력 안하면 자동으로 '\n'를 구분자로 사용.

string str;
getline(cin, str, '-');


주의점

int n;
string str;
cin >> n;
getline(cin, str);

위처럼 사용하면, n을 입력받은 후, 버퍼에 눌렀던 엔터(‘\n’)가 그대로 남아있어서 getline()에 들어가기 때문에 getline부분이 의도된대로 실행되지 않음.

따라서 str에는 아무것도 들어가지 않게됨.


해결법

int n;
string str;
cin >> n;
cin.ignore();
getline(cin, str);

cin.ignore() 를 사용해서 입력 버퍼의 모든 내용을 제거해주면 정상적으로 작동함

string str;
string newStr;

getline(cin, str, ',');
cout << str << endl;

cin.ignore(numeric_limits<streamsize>::max(), '\n');

cin >> newStr;
cout << newStr;

그리고 cin.ignore() 는 버퍼 전체를 비우는 것이 아닌, 하나만 비우는 것으로 추정됨.

따라서 버퍼 전체를 비우려면 cin.ignore(numeric_limits<streamsize>::max(),'\n') 를 사용해서 마지막 엔터까지의 모든 버퍼를 비워줘야함.





cin.getline

헤더파일

#include<istream> //iostream에 포함되어있음


사용법

cin.getline(변수 주소, 최대 입력 가능 문자수, 종결 문자);
//종결문자를 안적으면 '\n'로 자동설정

cin.getline(char* str, streamsize n);
cin.getline(char* str, streamsize n, char dlim);
  • 문자 배열이며 마지막 글자가 ‘\0’인 c-string을 입력받는 용.
  • 종결문자 전까지 읽어서 저장함.
  • n-1 개의 문자 개수만큼 읽어와 str에 저장 (n번째 문자는 NULL(‘\0’)로 바꿈)

주의점

char str[3];
int n;
cin >> n;
cin.getline(str, 3,'-');
cout << str;

위 처럼 n을 cin으로 입력받으면, 버퍼에 ‘\n’이 남아있기 때문에, 위 경우에서는 str의 첫부분에 \n이 들어가게 됨.


해결법

char str[3];
int n;
cin >> n;
cin.ignore();
cin.getline(str, 3,'-');
cout << str;

따라서 이를 막기 위해서는 cin.ignore( )로 버퍼를 비워주면 됨.





cin.get

헤더파일

#include<istream> //iostream에 포함되어있음


사용법

char ch1, ch2;
ch1 = cin.get();
ch2 = cin.get();
  • 표준 입력 버퍼에서 문자를 하나만 가져옴.
  • 문자 하나만 입력이 가능하며 공백, 개행도 입력으로 인식함.

카테고리:

업데이트:

댓글남기기