我知道我的问题也有类似的问题,但是我检查了很多问题并没有找到答案,所以我希望有人可以帮助我。 所以我想要做的是将一些字符串存储到数组中,但是这些字符串中的一些可能包含多个单词,所以我搜索了互联网,发现我必须使用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 Larkin Street
900 Larkin Street
823 Larkin Street
283 Larkin Street
**名字John
aaksonen姓氏
地址23 Larkin Street
名字迈克尔
Taro姓氏
地址900 Larkin Street
名字丹尼尔
姓氏Albot
地址823 Larkin Street
名字Radu
史密斯姓名
地址283 Larkin Street **
粗体是程序的输出。看看Laaksonen中的L是如何丢失的,123中的1是丢失的。
答案 0 :(得分: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
会更合适。
答案 1 :(得分:0)
另一种方法是使用getline()读取所有内容,并自己解析整数(使用atoi或其他类似内容),避免完全忽略。