微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++为什么我用getlinecin,array [x]进行的第一个数据输入在同一行上却坏了,而我的第二个数据输入没问题?

如何解决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循环来打印他们的名字和地址

这是输出图像 Result

为什么我的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 举报,一经查实,本站将立刻删除。