如何解决C ++为什么我用getlinecin,array [x]进行的第一个数据输入在同一行上却坏了,而我的第二个数据输入没问题?
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int person;
cout << "How many person to data: ";
cin >> person;
int x = 0;
int i = 1;
string name[person];
string adress[person];
while(x < person){
cout << i << " person data" << endl;
cout << "Name: ";
getline(cin,name[x]);
cout << "Adress: ";
getline(cin,adress[x]);
cout << endl;
x++,i++;
}
for(x=0; x<person; x++){
cout << name[x] << setw(15) << adress[x] << endl;
}
}
这是我的代码,用于将名称和地址存储到数组名称[]和地址[]中 然后我用for循环来打印他们的名字和地址
为什么我的1个人数据损坏了? 名字和地址在同一行,而我的第二人称数据很好吗?
如果我使用cin >>很好,但是我使用getline,这样我就可以使用全名和一个空格作为地址
解决方法
对于初学者,可变长度数组
string name[person];
string adress[person];
不是标准的C ++功能。而是使用标准容器std::vector<std::string>
之类的
#include <vector>
//...
std::vector<std::string> name( person );
std::vector<std::string> adress( person );
或者可以声明两个std::pair<std::string,std::string>
类型的对象的向量,而不是两个向量
#include <utility>
#include <vector>
//...
std::vector<std::pair<std::string,std::string>> persons( person );
在这种情况下,您应该像这样写循环
//...
getline(cin,persons[x].first );
//...
getline(cin,persons[x].second);
输入后
cin >> person;
输入流包含与按下的Enter键相对应的换行符'\n'
。您需要在while循环之前将其删除,例如
std::cin.ignore( std::numeric_limits<std::streamsize>::max(),'\n' );
为此,您需要包含标题<limits>
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。