2017-05-24 10 views
1

ここにいくつかの助けが必要です。iostreamとcinとcoutのC++同期

look at this code: 
#include<bits/stdc++.h> 
using namespace std; 
int main() 
{ ios::sync_with_stdio(false); 
    cin.tie(false); 
    while(true) 
    { 
     int x; 
     cin>>x; 
     cout<<x<<"\n"; 

     if(x==42){ 
      break; 
     } 

    } 
    return 0; 
} 

と今、この:

#include<bits/stdc++.h> 
using namespace std; 
int main() 
{ 
    while(true) 
    { 
     int x; 
     cin>>x; 
     cout<<x<<"\n"; 

      if(x==42){ 
      break; 
     } 

    } 
    return 0; 
} 

iはコードの両方を実行すると、最初のものは、最初にすべての入力を受け入れて出力を示す図です。しかし、同じコードで2番目のものが同時に読み取られ、同時に印刷されます 何が問題なのですか、私は理解できません。

答えて

2

違いはcin.tie(false);です(実際はcin.tie(nullptr);)。これはcincoutの間の結合を取り除きます。

デフォルトではストリームはバッファされているため、バッファーがいっぱいになるか、ストリームがフラッシュされるまで、どちらか早い方で遅くなるまで、coutに書き込まれたテキストは表示されません。

しかし、デフォルトでは、cincoutに "結び付けられ"、各入力の前にバッファをフラッシュします。これにより、入力の前にcoutに書き込まれたプロンプトが表示されます。

関連する問題