Почему использование cin перед sync_with_stdio(false) дает случайные значения следующей переменной i/p
Это простой код:
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
int t,n;cin>>t;
cin.tie(NULL);
while(t--){
cin>>n;
cout<<n<<endl;
}
}
Если я приведу вклад как
2
1
2
Я получаю выход 1
2
(в новой строке), как и ожидалось. Теперь, если я использую cin>>t
до ios::sync_with_stdio(false);
, Тогда для того же i/p, o/p 0
0
(в новой строке).
НАСКОЛЬКО МНЕ ИЗВЕСТНО: ios::sync_with_stdio(false);
останавливает синхронизацию с c++
а также c
i/p
o/p
, но я использую cin
в обоих случаях почему это не работает?
1 ответ
Решение
Это поведение определяется реализацией.
Если эта функция (здесь она относится к sync_with_stdio) вызывается после того, как в стандартном потоке произошел ввод-вывод, поведение определяется реализацией: реализации варьируются от отсутствия эффекта до разрушения буфера чтения.