getchar()을 쓰자...ㅠ
보통 C언어에서는 입력 버퍼를 비우기 위해 fflush를 사용하는 경우가 있다.
예를 들어 배열의 크기를 입력받고, 그 안에 요소들을 한개씩 입력받는 경우에 개행문자('\n')가 그대로 들어가는 문제가 발생한다.
이를 방지하기 위해 백준에서 위 1991번 문제를 풀 때 fflush를 사용하였다.
예전부터 입력 버퍼 비우려면 fflush(stdin);이 정답이라고만 생각해서
생각없이 썼는데 이번 기회에 왜 쓰면 안되는지를 생각해보았다.
fflush는 출력 스트림에 대해서는 정의가 되어있지만 입력 스트림에 대해서는 정의가 되어있지 않다고 나와있다.
또한 공식 문서를 확인해보니 2015년 부터에서는 아무런 효과가 나타나지 않는다고 적혀있어서
https://en.cppreference.com/w/c/io/fflush
fflush - cppreference.com
int fflush( FILE *stream ); For output streams (and for update streams on which the last operation was output), writes any unwritten data from the stream's buffer to the associated output device. For input streams (and for update streams on which the last
en.cppreference.com
에서도, VS2015 전까지는 입력 버퍼를 비워줬던 것 같지만 이후에는 아무런 기능을 넣지 않았다고 적혀있다.
그러면 입력 스트림을 비우기 위해 뭘 써야하나?라는 생각이 들 수도 있다.
getchar()을 쓰자
'🌀 알고리즘(Algorithm) > 백준(문제 풀이)' 카테고리의 다른 글
[파이썬 풀이] 9251번: LCS(Longest Common Subsequence) - 백준 (0) | 2024.02.28 |
---|---|
[파이썬 풀이] 11687번: 팩토리얼 0의 개수 - 백준 (1) | 2024.01.20 |
[파이썬 풀이] 25345번: 루나의 게임 세팅 - 백준 (0) | 2022.08.17 |
[파이썬 풀이] 1152번: 단어의 개수 - 백준 (0) | 2022.08.14 |
[파이썬 풀이] 17202번: 핸드폰 번호 궁합 - 백준 (0) | 2022.07.28 |