2017-01-24 8 views
-5

あなたはおそらく持っている問題があるは、整数を入力する文字列は、C++、私は、整数 「スペースを」文字列をCINするにはどうすればよい

int x;string s; 
    cout<<"Enter Integer"<<endl; 
    cin>>x; 
    cout<<"Enter the string with spaces"<<endl; 
    //if i used cin>>s here then it will not read all the text because it has spaces 
    // is i used getline(cin,s); then it will not read any thing 
+2

なぜ#bits/stdC++。h>をインクルードするのですか? –

+2

何を試しましたか? * WHY *は誰も ''を含んでいますか? – DeiDei

+0

またはそれ以外のもの –

答えて

0

cin >> x読み込み、これは私のコードされていることあなたが入力した数字の数字で、次の改行ではありません。次に、文字列を読み取るためにcin >> sを実行すると、入力プロセッサーは改行を確認し、空の文字列のみを返します。

解決策は、std::getlineのように、入力行全体を読み取るように設計された関数を使用することです。対話式入力に抽出演算子>>を使用しないでください。

0

空白文字列を読み取るにはuse std::getline

しかし!

デリミタに当たったときに>>がどうなるかに注意してください。それは停止し、デリミタをストリームします。これは、>>>>として使用している限り、すべての空白を破棄する限り、問題ではありません。 std::getlineはその空白をキャプチャし、共通のケースは

user types in number and hits enter 
user types in string and hits enter 

です。どうしますか? >>は番号を抽出し、空白になると停止します。これはストリームの中でenterを押すことでストリームの終わりを残します。 std::getlineが続き、最初に目にするのは...行末です。 std::getlineは空の文字列を格納し、すぐに戻ります。今度はプログラムが空の文字列を処理し、文字列を入力しようとしているユーザは、将来の読み込みによって読み込まれる文字列を入力します。おそらく入力ストリームをエラーケースに置き、確かにユーザに驚きを与えます。

一般的な解決方法は、入力と呼び出しの入力を促すメッセージが表示されるまで、ストリーム内にまだ終了しているデータをすべて消費することです(std::getline)。

関連する問題