scanf loop error

문제를 풀다보면

Python

[Menu]
1. Add integer
2. Delete integer
3. Compress
4. Exit
>> [!] Invalid command

[Menu]
1. Add integer
2. Delete integer
3. Compress
4. Exit
>> [!] Invalid command

[Menu]
1. Add integer
2. Delete integer
3. Compress
4. Exit
>> [!] Invalid command

[Menu]
1. Add integer
2. Delete integer
3. Compress
4. Exit
>> [!] Invalid command

[Menu]
1. Add integer
2. Delete integer
3. Compress
4. Exit
>> [!] Invalid command

[Menu]
1. Add integer
2. Delete integer
3. Compress
4. Exit
>> [!] Invalid command

[Menu]
1. Add integer
2. Delete integer
3. Compress

... 중략

다음과 같이 loop형 대화형 프로그램이 고장나는 것을 가끔식 목격한다.

이유가 뭘까? 궁금해서 알아보니 바로 scanf와 같은 함수에서 일어나는 stdin 파일의 inner buffer 때문이었다. 예를 들어

Python
scanf("%d" , &menu_num);

다음과 같은 코드가 있다하자

이때 scanf는 inner buffer에서 읽어올텐데 만약 내가 “A” 같은 것을 쳐서 inner buffer에 A가 들어가있으면, scanf에서는 이 바이트를 처리하지 못하고 계속 실패가 발생한다. 따라서 scanf가 계속 실패하고 “A” 바이트는 계속 남아있어서 무한 루프가 돌게 된다.

inner buffer에 대해 궁금하다면,