用c / c ++在循环中扫描和打印数组

时间:2015-03-14 17:47:39

标签: c++

我想创建一个程序,从用户扫描输入行数 喜欢:

输入:

3
zyad sabry 322
ahmed alaa 11
john adams 122

输出:

zyad sabry 322
ahmed alaa 11
john adams 122

这是我的代码:

      scanf("%d",&n);
    for(i=0;i<n;i++)
        cin >> name >> lname >> num ;

  for(i=0;i<n;i++)
        cout << name << " " << lname << " " << num  << endl;
        return 0;

1 个答案:

答案 0 :(得分:3)

所以你有很多属性,namelnamenum,你想要存储所有属性。

要将多个对象存储为集合,std::vector通常是一个很好的容器。您可以像这样使用它来解决您的问题:

std::vector<std::string> names;  // this vector contains each name
std::vector<std::string> lnames; // this vector contains each lname
std::vector<std::string> nums;   // this vector contains each num

for(i=0;i<n;i++)
{
    std::string name, lname, num;
    std::cin >> name >> lname >> num;
    names.push_back(name);   // adds `name` to the `names` vector
    lnames.push_back(lname); // adds `lname` to the `lnames` vector
    nums.push_back(num);     // adds `num` to the `nums` vector
}

for(i=0;i<n;i++)
{
    std::cout << names.at(i) << " ";  // prints the name at index i in `names`
    std::cout << lnames.at(i) << " "; // prints the corresponding lname in `lnames`
    std::cout << nums.at(i) << std::endl; // prints the corresponding num in `nums`
}

然而,这不是最好的解决方案。由于您的namelnamenum变量基本上代表,因此最好定义一个来保存所有一个人的数据。该类可以称为Person,例如:

class Person
{
public:
    std::string name;
    std::string lname;
    int num;
};

现在我们有Person类,我们可以简单地定义一个向量来保存所有Person个实例:

std::vector<Person> persons;

for(i=0;i<n;i++)
{
    Person person; // creates a new Person object

    // now let's read the name, lname and num for that person:
    std::cin >> person.name;
    std::cin >> person.lname;
    std::cin >> person.num;

    // and add the person to the list of persons
    persons.push_back(person); 
}

要从向量中打印出来的人,我们现在可以简单地执行此操作:

for(i=0;i<n;i++)
{
    std::cout << persons.at(i).name << " " << persons.at(i).lname << " " << persons.at(i).num << std::endl;
}

这当然可以进一步改善,但我会让你自己学习。