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() 함수도 검색을 통해 알아보면 좋을것이다.
반응형
'Programming > 프로그래밍' 카테고리의 다른 글
[Unity] 코드로 씬에 있는 오브젝트 선택하기(select object in hierarchy) (0) | 2022.01.10 |
---|---|
NGUI - UIInput에 선택된게 있는지 확인하는법. (0) | 2021.10.26 |
비주얼 스튜디오 인텔리센스 완료모드 (0) | 2020.07.14 |
deprecated / obsolete 의미. (0) | 2017.11.08 |