[C++] 문장 전체를 입력값으로 받을 때

뚱이·2023년 9월 1일
0

문장 전체를 입력값으로 받을 때

정수값이든, 문자 하나든, 문자열이든 그냥 cin >> s 으로 입력 받으면 되지만,
공백이 포함된 문장 전체는 cin 으로 받을 수가 없다.

공백이 포함된 문장 전체를 입력값으로 받을 땐 getline(cin, s) 를 사용해서 받으면 된다.
참고로 getline() 함수는 <string> 헤더에 포함되어 있다.

🚨 주의사항 첫 번째

cin을 사용한 후에는 cin.ignore() 함수를 사용해줘야 한다.

cin 을 사용하면 값을 입력한 뒤 누른 엔터값('\n')이 버퍼에 남아 있다.
그래서 그냥 getline()을 사용하면 이 값이 그대로 들어가게 된다.

-> 그래서 cin.ignore() 함수를 먼저 사용해 입력 버퍼에 남아 있는 모든 값을 지워준다.

[ex]

string s1, s2;
cin >> s1;
cin.ignore();
getline(cin, s2);

🚨 주의사항 두 번째

getline() 함수는 while문 조건으로 사용할 수 없다

cin 은 다음과 같이 while문의 조건으로 사용할 수 있다.

string s;
while (cin >> s) {
	// 내부 코드
}

위와 같은 코드는 입력 개수를 모르는 상황에서 계속해서 입력을 받아야 할 때 사용할 수 있다.


반면 getline() 함수는 cin 처럼 while문의 조건을 사용할 수 없다.
만약 문장 전체를 값으로 받아야 하는데 입력 개수를 모르는 상황이라면, 다음과 같이 하면 된다.

string s;
while (true) {
	getline(cin, s);
    if (s == "")
    	break;
    // 나머지 코드
}

0개의 댓글