공부/C, C++
[C++] string 공백 포함 입력, 입력 버퍼 비우기
happyst
2022. 1. 31. 02:20
#include <iostream>
#include <string>
using namespace std;
int N;
string input;
int main(void)
{
cin >> N;
cin.ignore();
while(N--)
{
cout << "[" << N << "]\n";
getline(cin, input);
}
return 0;
}
cin.ignore( )
입력 버퍼를 비워주는 함수.
cin.ignore( ) 를 추가하지 않았을때는 N번이 아닌 (N-1)번의 입력을 받은 후 프로그램이 종료되었음!
(주의) cin.ignore( )는 입력 버퍼의 첫번째 문자를 비워준다.
위 코드에서는 cin >> N; 을 통해 숫자를 받은 후 엔터(\n)를 입력하므로 입력 버퍼에 \n이 남아있는 상태인데, cin.ignore( )을 이용해서 \n을 지워줬으므로 입력 버퍼가 지워진 것이다.
아래 코드를 통해 cin.ignore( )을 실험해봤다.
#include <iostream>
#include <string>
using namespace std;
int N;
string input;
int main(void)
{
cin >> N;
cin.ignore(3);
while(N--)
{
cout << "[" << N << "]\n";
getline(cin, input);
cout << ">> " << input << "\n";
}
return 0;
}
코드 실행 결과
1 입력 후 엔터 👉 입력 버퍼: ['\n']
cin.ignore(3) 👉 입력 버퍼: [ ] // '\n'은 삭제되었고, cin에 입력될 문자열의 처음 2개의 문자를 삭제함
"abcdefg hijk" 입력 👉 입력 버퍼: ['cdefg hijk']
getline(std::cin, string str)
공백을 포함한 문자열을 입력으로 받게하는 함수
❗ 틀린 부분이 있을 수 있습니다... cin이랑 getline에 대해서는 더 찾아봐야될 것 같다