프로그래밍 공부/알고리즘

[c++] ios_base::sync_with_stdio(false)

U&MeBlue 2018. 9. 4. 21:04




오늘 백준 문제를 풀다가 알게된 사실.


c++ 의 표준 입출력(iostream)에서 주로 입출력의 속도를 향상시키기 위해 다음과 같은 코드를 맨 상단에 적는데,

ios_base::sync_with_stdio(false)


백준에서 문제를 풀다가 이 코드가 있고 없고에 따라서 오답과 정답으로 채점되는 경험을 했다.


무엇이 문제인고 하니, 

ios_base::sync_with_stdio(false) 과 같이 입력을 하면 iostream의 입출력 기능과 stdio 의 입출력 기능을 섞어서 사용하면 잘못된 결과가 나타날 수 있다는 것이었다.


해당 코드에는 cin, cout, getchar()가 사용되고 있었다.


ios_base::sync_with_stdio() 에 대해서 찾아보니 이 함수는 표준 c++스트림과 c 스트림을 동기화 시켜주는 함수라고 한다. ios_base::sync_with_stdio(true)로 설정하면, c++의 버퍼는 사용되지 않고, c의 버퍼를 같이 사용하는(?) 것으로 대충 해석된다. 또한 ios_base::sync_with_stdio(false)로 설정하면, c++ 스트림이 독립된 버퍼를 사용하여 c와 동기화 되지 않고, 입출력 순서가 이상해질 수 도 있음을 설명하는 것 같다.



관련 링크

https://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio