코딩을 하다 보면 사용자로부터 입력을 받을 때 입력 버퍼에 문자가 남아있어서 입력이 무시되거나 코드가 원하는 흐름대로 흘러가지 않는 경우가 있습니다. 입력 버퍼에 문자가 남아있다고 확신한다면 다음과 같은 방법을 사용할 수 있습니다.
cin.ignore(numeric_limits<streamsize>::max(), '\n');
이 방법은 개행문자가 나올 때까지 버퍼에 있는 입력을 무시하지만 버퍼가 이미 비어있었다면 사용자로부터 받아야 할 입력을 무시해 버리게 됩니다. 그래서 다음과 같이 버퍼에 문자가 남아있는 수만큼 무시하는 방법이 있습니다.
cin.ignore(cin.rdbuf()->in_avail());
in_avail()은 버퍼에 남아있는 문자의 수를 반환하는데 문자가 남아있지 않다면 0개의 문자를 무시하므로 이어지는 입력이 무시되지 않고 정상정으로 입력될 수 있습니다. 다음 세 가지 경우를 모두 해결할 수 있습니다.
- 입력 버퍼가 비워져 있는 경우 : [ ]
- 입력 버퍼에 남아있는 경우 : [ a b c d e \n ]
- 입력 버퍼에 개행문자가 여러개 남아있는 경우 : [ a b c d \n e f g \n ]
자주 발생하는 상황은 아니지만 알아두면 좋을 것 같습니다.
'C & C++ > C++' 카테고리의 다른 글
[C++] C++ 20 (0) | 2024.08.26 |
---|---|
[C++] Modern C++ (0) | 2024.08.26 |
[C++] STL (0) | 2024.08.20 |
[C++] 템플릿, 타입 (0) | 2024.08.16 |
[C++] 예외 처리 (0) | 2024.08.08 |