你好,我有一个这样的结构:
struct Student
{
string name,lettergrade;
int stdnumber,*examgrades;
double avarege;
};
我必须制作一个程序来计算学生的平均成绩和字母成绩。
我必须使用这个函数:
void getdata();
double calcgrades();
void show();
void erase();
我必须询问用户学生总数和考试总数。然后我必须分配必要的内存空间。 (动态分配)
输出画面一定是这样的:
Enter the number of students: 2
Enter the number of exams: 2
1. student's name: michael
1. student's school number: 5000
1. student's 1. exam grade: 50
1. student's 2. exam grade: 40
The avarege of this student is: 45 Letter grade: F
2. student's name: [b]mary[/b]
2. student's school number: 6000
2. student's 1. exam grade: 70
2. student's 2. exam grade: 80
The avarege of this student is: 75 Letter grade: B
我的问题是,我无法为字符串变量分配它,例如学生姓名和字母等级...(在 getdata 函数中)
字母等级为 A:85-100,B:75-84,C:65-74,D:50-64,F:0-49 超过 100 分。
谁能知道这个问题?
编辑:
void getdata()
{
int i,j;
i=0;j=0;
int stdnumber;
int examnumber;
cout<<"How many students..."<<endl;
cin>>stdnumber;
Student k[stdnumber];
cout<<"How many exams...."<<endl;
cin>>examnumber;
for (i=0;i<stdnumber;i++)
{
cout<<i+1<<". student's name: "<<endl;
cin>>k[i].name;
cout<<i+1<<". student's school number: "<<endl;
cin>>k[i].stdnumber;
for (j=0;j<examnumber;j++)
{
cout<<i+1<<". student's "<<j+1<<". exam grade: "<<endl;
cin>>k[i]->examgrades; //The error is here: base operand of '->' has non-pointer type 'Student'|
}
}
}
我想告诉你的是我的问题是指针。我不知道如何为考试成绩分配足够的内存空间?
最佳答案
在您的代码中,k
是一个Student
数组,而不是一个Student*
数组。所以你需要使用.
而不是->
。这就是你得到那个错误的原因。该代码的另一个问题是您对数组大小使用了非常量值,这在 C++ 中是不允许的。
对于动态分配,最简单的解决方案是使用 std::vector
。这会同时处理分配和解除分配,无需额外处理。
鉴于这是家庭作业,如果由于某种原因不允许您使用 std::vector
,您将需要使用 new[]
和 delete []
.
如果由于某些非常愚蠢的原因你不能使用 new[]
和 delete[]
你将需要使用 malloc
和 免费
。
关于c++ - 带数组的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7739310/