2016-07-20 7 views
1
#include <iostream> 
#include <iomanip> 
#include <limits> 

using namespace std; 

int main() { 
    int i2 = 0; 
    double d2 = 0.0; 
    string s2; 

    cin >> i2; 
    cin >> d2; 
    getline(cin, s2); 

    cout << "Integer = " << i2 << endl; 
    cout << "Double = " << d2 << endl; 
    cout << "String = " << s2 << endl; 
} 

を読んだ後にスペースを含む文字列を読み取ることができない:私のようにサンプル入力を与えるためにしようとしているdouble値

12 
3.4 
Coding 

予想される出力:

Integer = 12 
Double = 3.4 
String = Coding 

実際の出力

Integer = 12 
Double = 3.4 
String = 

上記の実際の出力に示すように、上から最初の2つの入力を入力し、入力が押された瞬間、次の入力を受け付けません。

答えて

0

getline()cinで未読'\n'がある呼び出されると、それはそうgetline()がちょうど空の文字列を読み込み

cin >> d2; 

後、未読放置しました。

2

ストリームに '\ n'があるので、getlineは空の行を読み取ります。 書き込み:

cin >> d2: 
cin.ignore(); // new line 
getline(cin,s2); 

UPDATE:あなたはより高度利用バージョン使用することができ

:あなたは意味のある()関数の中でいくつかのテストを含めることができ

cin >> d2; 
cin.ignore(); // removes separator 
while (cin && !meaningful(s2)) 
    getline(cin,s2); 

を、例えば、その多くを含めます空白。

0

あなたはgetl​​ineが空行を読み込むように、未読の改行文字があります。

while(s2.empty()) 
{ 
    getline(cin, s2); 
} 

がこの問題を解決します。

関連する問題