我想使用来自用户的输入来创建多个结构对象
例如:
我想接受用户值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;
}
答案 0 :(得分:1)
您的示例存在许多问题。
第一个问题是student p[n];
。这不是严格有效的c ++。有些编译器允许作为扩展。在不知道您正在使用哪个编译器以及使用什么标志的情况下,我将假设这是问题的一部分。此问题的典型解决方案是使用std::vector。 std::vector
在许多方面起作用,就像一个可变大小的数组。 std::vector<student> p(n);
将创建一个名为p
的向量,其中包含n
默认构造的student
个对象。
下一个问题是get_input(student p[],n);
。传递参数时命名类型是不必要的和不正确的。只需写下get_input(p,n);
即可。毕竟,当您致电n
时,您没有指定int
是get_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;
}