ios::sync_with_stdio는 cpp의 iostream을 c의 stdio와 동기화시켜주는 역할을 합니다.
기본값인 true일 때는 cout << "HI"; printf("BYE"); cout<<"hi" 가 순서대로 출력되지만, false일때는 어떤 순서로 출력될지 알 수가 없죠.
그렇기 때문에 ios::sync_with_stdio(false); 를 추가하시면,
iostream 함수인 cin/ cout을 stdio 함수인 getchar()와 같이 쓰시면 안됩니다.
dygks232 6년 전 3
ios::sync_with_stdio(false);
저는 이 문장을 쓰는 이유가
cout, cin을 쓰면 printf, scanf보다 실행시간이 느린데, 저 문장을 쓰면 cout, cin을 써도 속도가 빨라진다
라고 주워들어 배웠습니다. 체감한 적은 없지만, 지금까지는 뭐 저 문장을 써도 손해볼 일이 없었기에 그냥 쭉 써왔고요.
문제가 하나 생겼습니다.
백준의 어떤 문제를 하나 풀면서 아래와 같은 코드를(include 등등은 생략) 제출하였는데, 아무리 생각해도 맞는 코드가 "틀렸습니다"가 떴습니다.
설마설마 하다가 ios::sync_with_stdio(false); 한문장만 지우고 다시 제출했더니 "맞았습니다"가 떴습니다.
제가 궁금한 점은, 저 한 문장이 이 코드에 끼친 영향이 무엇일까? 입니다.
지금까지 cout, cin과 함께 저 문장을 써도 오답처리된적은 없었는데, 혹시 string을 입력받는 getline함수에서 문제가 발생하는걸까 싶어 이 코드에서 getline을 cin으로 바꿔봐도(이 문제에서 띄어쓰기를 포함한 입력은 고려할 필요가 없습니다.) 같은 문제가 발생하여 그건 아닌거같았고요...
대체 저 코드가 하는 역할과 저 코드가 왜 오답처리가 되는 요인이었는가? 가 궁금합니다!!