使用用户输入创建对象

时间:2017-02-07 14:52:12

标签: c++ function object struct parameters

我想使用来自用户的输入来创建多个结构对象 例如:
我想接受用户值n并创建n个对象,并将这些对象传递给我将变量初始化为它们的函数。

#include <iostream>
#include<string>
#include "stdio.h"

using namespace std;

struct student
{
    int roll_no;
    char name[20];
};

void get_input(student p[],int n1)
{   
    for(int i=1;i<=n1;i++)
    {   
        cout<<"Enter Roll Number ";
        cin>>p[i].roll_no;
        cout<<"\n Enter Name of the student: ";
        cin>>p[i].name;
    }
}

int main()
{

    int n;
    cout<<"How many student details would you want to enter: ";
    cin>>n;
    //Want to create number of object based on input n
    student p[n];
    get_input(student p[],n);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

您的示例存在许多问题。

第一个问题是student p[n];。这不是严格有效的c ++。有些编译器允许作为扩展。在不知道您正在使用哪个编译器以及使用什么标志的情况下,我将假设这是问题的一部分。此问题的典型解决方案是使用std::vectorstd::vector在许多方面起作用,就像一个可变大小的数组。 std::vector<student> p(n);将创建一个名为p的向量,其中包含n默认构造的student个对象。

下一个问题是get_input(student p[],n);。传递参数时命名类型是不必要的和不正确的。只需写下get_input(p,n);即可。毕竟,当您致电n时,您没有指定intget_input。但是,由于p现在是std::vector,我们需要添加.data()来获取指向实际数据的指针。它变为get_input(p.data(), n);

最后一个关键问题是循环for (int i = 1; i <= n1; i++)。想象n是3.值i将采用1,2和3.但是,数组从0开始编制索引。如果n为3,则需要访问元素0 ,1和2.正确的循环是for (int i = 0; i < n1; i++)

这些更改将允许您的示例工作,但仍然可以进行许多改进。

#include <iostream>
#include <vector>

using namespace std;

struct student
{
    int roll_no;
    char name[20];
};

void get_input(student p[], int n1)
{
    for (int i = 0; i < n1; i++)
    {
        cout << "Enter Roll Number ";
        cin >> p[i].roll_no;
        cout << "\n Enter Name of the student: ";
        cin >> p[i].name;
    }
}

int main()
{

    int n;
    cout << "How many student details would you want to enter: ";
    cin >> n;
    //Want to create number of object based on input n
    std::vector<student> p(n);
    get_input(p.data(), n);


    return 0;
}

考虑使用std::string代替char name[20]。你不必猜测一个名字可能有多长,并且你不会因为名字较长而冒未定义行为的风险。

struct student
{
    int roll_no;
    std::string name;
};

考虑通过引用传递p,而不是使用指针和大小。

// Declaration / definition
void get_input(std::vector<student> & p)

// Usage
get_input(p);

考虑使用基于范围的for循环而不是常规for循环。

void get_input(std::vector<student> & p)
{
    // for each student in p
    for (student & s : p)
    {
        cout << "Enter Roll Number ";
        cin >> s.roll_no;
        cout << "\n Enter Name of the student: ";
        cin >> s.name;
    }
}

答案 1 :(得分:0)

使用vector student:以下是一些示例代码,说明如何执行此操作:

#include <iostream>
#include <string>
#include <vector>
#include "stdio.h"

using namespace std;

struct student
{ int roll_no;
  char name[20];
};

 void get_input(vector<student> & p1, int n1)
{   
    for (int i=0; i<n1; i++) 
    { 
        student s;
        cout<<"Enter Roll Number: ";
        cin>>s.roll_no;
        cout<<"\n Enter Name of the student: ";
        cin>>s.name;
        p1.push_back(s);
    }
}

int main()
{

    int n;
    cout<<"How many student details would you want to enter: ";
    cin>>n;
    //Want to create number of object based on input n
    vector<student> p;
    get_input(p, n);


    return 0;
}