スペースを含むことができる複数の文字列を入力する場合の解決策

本来の書き方:

#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;
} 

おすすめ

転載: blog.csdn.net/weixin_61725823/article/details/125868572