[英]Getline & cin.ignore in c++
我知道我也有類似的問題,但是我檢查了很多,但沒有找到答案,所以我希望有人可以幫助我。 所以我想做的是將一些字符串存儲到數組中,但是其中一些字符串可能包含多個單詞,因此我在互聯網上搜索后發現必須使用cin.ignore()和Getline。 我使用了它們,如下面的代碼所示,但錯誤發生在第二個和第三個字符串中,其中刪除了姓[0]和地址[0]的首個字母。 那為什么呢? 謝謝
這是我的代碼:
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號
**名字約翰
亞克森姓
地址拉金街23號
邁克爾的名字
芋頭
地址900 Larkin Street
丹尼爾(Daniel)
姓阿爾伯特
地址823 Larkin Street
名Radu
史密斯姓氏
地址283 Larkin Street **
粗體是程序的輸出。 查看Laaksonen中的L如何丟失以及123中的1是否丟失。
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
。
一種替代方法是使用getline()讀取全部內容,然后自己解析整數(使用atoi或類似的方法),而無需完全忽略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.