방문자 놀이터

안녕하세요. 언제나 휴일입니다.

여기는 방문자 놀이터입니다.

IT 관련 내용이나 유머 등 자유롭게(불법, 광고, 음란 내용 등의 게시물 제외) 올리세요.

업로드 가능한 파일은 10KBytes 미만으로 제한합니다.

Re:선생님 여쭤볼게 있습니다.

작성자
죽어
작성일
2017-01-04 14:24
조회
654
#include <iostream>
#include <string>
using namespace std;

int main() {
char* s=new char[10];
cin.getline(s,10,'n');

if (!cin)

{cout << "flag on!!" << endl; //(1)

cin.clear();

}                                                    //(2)
if (cin.rdbuf()->in_avail()) {                     //(3)
cout << "clearner on" << endl;
cin.ignore(10, 'n');
}
string s2 = "default";
getline(cin, s2, 'n');

cout << s << " " << s2 << endl;
}

뭐가 문제인지 알아냈습니다.

입출력 스트림의 getine함수는 지정된 사이즈보다 많은 문자를 입력 받게 되면, 다음과 같은 과정을 거치나 봅니다.

1.스트림에서 [사이즈-1]만큼 대상 문자열에 입력을 받는다.

2.대상 문자열에 을 삽입해서 문자열을 완성한다.

3.스트림의 failbit를 세운다.(위의 (1)번 라인)

4.다만 스트림 버퍼에는 아직 데이터가 남아있는 상태고

5.상태비트가 세워져 있으므로 다음 입력은 받지 않고 넘어가게 된다.

따라서, 위의 (2)~(3)번 처럼 상태비트를 초기화 시켜주고, 입력스트림을 비워주면 되는 것입니다.

혹은 (3)번은 생략하고, 남은 값들을 그대로 받아올 수 있을 것입니다. 입력스트림에 개행문자가 남아있기 때문입니다.