C & C++/C++

[C++] 입력 버퍼가 비어있는지 확인하고 문자가 남아 있다면 제거하는 방법

거북이 코딩 2024. 9. 23. 22:57

 코딩을 하다 보면 사용자로부터 입력을 받을 때 입력 버퍼에 문자가 남아있어서 입력이 무시되거나 코드가 원하는 흐름대로 흘러가지 않는 경우가 있습니다. 입력 버퍼에 문자가 남아있다고 확신한다면 다음과 같은 방법을 사용할 수 있습니다.

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 ]

 자주 발생하는 상황은 아니지만 알아두면 좋을 것 같습니다.