2014-01-07 50 views
0

我知道這裏有類似的問題,但我查了很多,沒有找到答案,所以希望有人能幫助我。 所以我試圖做的是將一些字符串存儲到數組中,但其中一些字符串可能包含多個單詞,所以我搜索了互聯網,發現我必須使用cin.ignore()和Getline。我使用了它們,正如我在下面的代碼中所看到的,但錯誤發生在第二個和第三個字符串中,其中第一個字母姓氏[0]和地址[0]被刪除。那爲什麼呢?由於c + +中的Getline&cin.ignore

這裏是我的代碼:

int size; 
    cout<<"Please enter the number of entries"<<endl; 
    cin>>size; 
    cin.ignore(); 
    string* firstname=new string[size]; 
    string* surname=new string[size]; 
    string* address=new string[size]; 
    cout<<"First Name"<<endl; 
    for (int i=0;i<size;i++) 
     getline (cin, firstname[i]); 
    cout<<"Surname"<<endl; 
    cin.ignore(); 
    for (int i=0;i<size;i++) 
     getline (cin, surname[i]); 
    cout<<"Address"<<endl; 
    cin.ignore(); 
    for (int i=0;i<size;i++) 
     getline (cin, address[i]); 
    for (int i=0;i<size;i++) 
    { 
     cout<<"First Name "<<firstname[i]<<endl; 
     cout<<"Surname "<<surname[i]<<endl; 
     cout<<"Age "<<address[i]<<endl; 
    } 

編輯:採樣輸入/輸出

請輸入條目

數量4

約翰

邁克爾

丹尼爾

拉杜

Laaksonen

太郎

Albot

史密斯

地址

123拉金街

900拉金街

823拉金街

283拉金街

**的名字John

姓aaksonen

地址23拉金街

名字Michael

姓太郎

地址900拉金街

名字丹尼爾

蘇RNAME Albot

地址823拉金街

名拉杜

姓史密斯

地址283拉金街**

粗體是程序的輸出。看看Laaksonen中的L如何丟失,123中的1丟失。

+0

您能顯示樣本輸入和預期輸出嗎? –

+0

你爲什麼認爲你需要「忽略」?我想知道那封信去了哪裏?另外,請閱讀['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。 – BoBTFish

回答

3

getline()讀取並丟棄分隔符(reference),你只有當你讀你的第一個整數使用cin.ignore()

cout<<"First Name"<<endl; 
for (int i=0;i<size;i++) 
    getline (cin, firstname[i]); 

cout<<"Surname"<<endl; 
// Remove this: cin.ignore(); 
for (int i=0;i<size;i++) 
    getline (cin, surname[i]); 

cout<<"Address"<<endl; 
// Remove this: cin.ignore(); 
for (int i=0;i<size;i++) 
    getline (cin, address[i]); 

這就是說,你可能避免標準陣列,一個std::vector<std::string>> firstNames會更合適。

+0

謝謝你做到了 –

0

另一種方法是使用getline()來讀取所有數據,並自己分析整數(使用atoi或某些類型),避免完全忽略。