Почему использование 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

Я получаю выход 12(в новой строке), как и ожидалось. Теперь, если я использую cin>>t до ios::sync_with_stdio(false);, Тогда для того же i/p, o/p 00(в новой строке).

НАСКОЛЬКО МНЕ ИЗВЕСТНО: ios::sync_with_stdio(false); останавливает синхронизацию с c++ а также c i/po/p, но я использую cin в обоих случаях почему это не работает?

1 ответ

Решение

Это поведение определяется реализацией.

Если эта функция (здесь она относится к sync_with_stdio) вызывается после того, как в стандартном потоке произошел ввод-вывод, поведение определяется реализацией: реализации варьируются от отсутствия эффекта до разрушения буфера чтения.

Другие вопросы по тегам