gpt4 book ai didi

c++ - C++ 中的 Getline 和 cin.ignore

转载 作者:行者123 更新时间:2023-11-27 23:09:51 26 4
gpt4 key购买 nike

我知道有类似的问题,但我查了很多都没有找到答案,所以我希望有人能帮助我。所以我想做的是将一些字符串存储到数组中,但其中一些字符串可能包含多个单词,所以我搜索了互联网,发现我必须使用 cin.ignore()getline。我使用了它们,如下面的代码所示,但错误发生在第二个和第三个字符串中,其中 surname[0]address[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

名字

约翰

迈克尔

丹尼尔

拉杜

姓氏

拉克索宁

芋头

阿尔伯特

史密斯

地址

拉金街 123 号

拉金街 900 号

拉金街 823 号

拉金街 283 号

**名字约翰

姓氏

地址拉金街 23 号

名字迈克尔

姓太郎

地址 900 拉金街

名字丹尼尔

姓阿尔伯特

地址 823 拉金街

名字拉杜

姓史密斯

地址 283 拉金街**

粗体是程序的输出。查看 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会更合适。

关于c++ - C++ 中的 Getline 和 cin.ignore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20970780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com