本来の書き方:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
getchar();//吸收回车符
while(t--)
{
string s;
getline(cin,s);
cout<<s<<endl;
}
return 0;
}
その後、入出力の効率を上げるために、出力の同期とバンドル解除をオフにしましたが、上記の書き込み方法が失敗したため、getchar() を cin.ignore() に置き換えてこの問題を解決しました。
【
cin.ignore() の一般的な機能は、復帰で終わる入力バッファの内容をクリアし、次の入力に対する前の入力の影響を排除することです。たとえば、cin.ignore(1024, '\n') のように使用できます。通常は、2 番目のパラメーター '\n' のみが機能するように、最初のパラメーターを十分な大きさに設定します。そのため、この文は、入力バッファー ストリームからキャリッジ リターンの前のすべての文字 (キャリッジ リターンを含む) をクリアします。
デフォルトでパラメータが指定されていない場合、デフォルトのパラメータは cin.ignore(1, EOF) です。つまり、EOF の前の 1 文字をクリアし、EOF に到達する前に 1 文字をクリアして終了します。
】
その後の書き込み:
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t;
cin>>t;
cin.ignore();
while(t--)
{
string s;
getline(cin,s);
cout<<s<<endl;
}
return 0;
}