Programming/프로그래밍

[C++] string 문자열 입력받기

leeusin 2021. 1. 13. 14:51

C++스러운 코드 #2 : 문자열을 입력받는 12가지 방법

 

문자열 입력받는 방법에 대한 방법론에 대한것이 궁금하다면 위 링크를 따라가보면 될것이다.

 

나는 조금다른 문제에 부딛혀 이 포스팅을 써본다.

 

기본적으로 std::cin 을 통해 입력을 받을때에는 아래와 같이 사용한다.

int x;
float a;

cin >> x >> a; 

다음은 문자열

string str;

cin >> str;
cout << str;

위 처럼 코딩했을경우 첫번째 난관에 부딛힌다.

 

Hello?

같은 문장을 입력받았다면 무사히 통과하겠지만

 

Hello? I am a student. 같은 문장이었다면

 

출력창엔 

Hello? 밖에 보이지 않을 것이다.

 

이는 cin 의 >> 연산자에서는 공백문자일때 입력을 끊게 된다.

 

따라서 str 에는 Hello? 만 저장되는 것이다.

 

방법은 getline 함수 사용.

string str;

getline(cin,str);

cout << str << endl;

잘 된다.

 

Hello? I am a student. 같은 공백문자가 있는 문장도 잘 받아서 출력해준다.

 

그렇다면

int x;
string str;

cin >> x; 
getline(cin,str);

cout << x << "\n" << str << endl;

입력:

5

Hello? Nice to meet you!

 

잘 될까?

 

답은 "아니다"

 

문제가 뭘까?

 

첫번째 입력을 받았을때 5와 엔터를 받은것이 오류가 된다.

엔터 즉 개행문자가 cin의 버퍼에 남아 getline 에서 사용되어버린다. 

즉 str안에 남는 것이다. 결과는 빈것과 마찬가지가 되어버린것.

 

버퍼를 비워줘야한다. 

cin.ignore(256,'\n');

getline함수 사용전에 넣어주자. 

 

버퍼가 삭제외었으므로 다시 입력을 받을것이다.

 

이외에도 cin.clear() 함수도 검색을 통해 알아보면 좋을것이다.

 

 

 

반응형