问题出在哪
#include<iostream>#include<string>
using namespace std;
struct student
{
string sname;
int score;
};
struct teacher
{
string tname;
struct student sarray;
};
void allocatespace(struct teacher tarray,int len)
{
string nameseed="ABCDE";
for(int i=0;i<len;i++)
{
tarray.tname="teacher_";
tarray.tname+=nameseed;
for(int j=0;j<5;j++)
{
tarray.sarray.sname="student_";
tarray.sarray.sname+=nameseed;
tarray.sarray.score=60;
}
}
}
void print(struct teacher tarray,int len)
{
for(int i=0;i<len;i++)
{
cout<<"老师姓名"<<tarray.tname<<endl;
for(int j=0;i<5;j++)
{
cout<<"学生姓名"<<tarray.sarray.sname
<<""<<"考试分数"
<<tarray.sarray.score<<endl;
}
}
} 问题出在以下几个地方:
1. 在函数 allocatespace 中,循环变量 i 的范围应该是 0 到 len-1 ,而不是 0 到 len 。因为数组的索引是从 0 开始的。
2. 在函数 allocatespace 中,循环变量 j 的范围应该是 0 到 4 ,而不是 0 到 j 。因为每个老师有5个学生,所以需要循环5次。
3. 在函数 allocatespace 中,对于每个学生的姓名和分数的赋值,应该使用循环变量 i 和 j ,而不是 j 和 j 。因为 j 是循环变量,应该用于索引学生姓名和分数。
4. 在函数 print 中,循环变量 j 的范围应该是 0 到 4 ,而不是 0 到 i 。因为每个老师有5个学生,所以需要循环5次。
下面是修正后的代码:
#include<iostream>
#include<string>
using namespace std;
struct student
{
string sname;
int score;
};
struct teacher
{
string tname;
struct student sarray;
};
void allocatespace(struct teacher tarray, int len)
{
string nameseed = "ABCDE";
for (int i = 0; i < len; i++)
{
tarray[ i].tname = "teacher_";
tarray[ i].tname += nameseed[ i];
for (int j = 0; j < 5; j++)
{
tarray[ i].sarray.sname = "student_";
tarray[ i].sarray.sname += nameseed;
tarray[ i].sarray.score = 60;
}
}
}
void print(struct teacher tarray, int len)
{
for (int i = 0; i < len; i++)
{
cout << "老师姓名:" << tarray[ i].tname << endl;
for (int j = 0; j < 5; j++)
{
cout << "学生姓名:" << tarray[ i].sarray.sname
<< "考试分数:" << tarray[ i].sarray.score << endl;
}
}
}
int main()
{
struct teacher tarray;
int len = 3;
allocatespace(tarray, len);
print(tarray, len);
return 0;
}
修正后的代码已经解决了问题,并且在 print 函数中正确地打印了老师和学生的姓名以及分数。 问题出在函数allocatespace和print的实现中。
1. 函数allocatespace的错误
在函数allocatespace中,变量tarray是一个包含3个teacher结构体的数组,每个teacher结构体中有5个student结构体。因此,在循环中应该使用变量tarray而不是tarray来分别访问每个teacher结构体和student结构体。另外,在对sname成员变量赋值时,应该使用tarray.sarray.sname而不是tarray.sarray.sname。
正确的代码如下:
++
void allocatespace(struct teacher tarray, int len)
{
string nameseed = "ABCDE";
for (int i = 0; i < len; i++)
{
tarray.tname = "teacher_";
tarray.tname += nameseed;
for (int j = 0; j < 5; j++)
{
tarray.sarray.sname = "student_";
tarray.sarray.sname += nameseed;
tarray.sarray.score = 60;
}
}
}
2. 函数print的错误
在函数print中,变量tarray是一个包含3个teacher结构体的数组,因此,在循环中应该使用变量tarray而不是tarray来分别访问每个teacher结构体。在输出学生信息时,内层循环中的变量i应该改为j。
另外,由于tarray是一个数组,函数参数中应该加上数组的长度len。
正确的代码如下:
++
void print(struct teacher tarray, int len)
{
for (int i = 0; i < len; i++)
{
cout << "老师姓名:" << tarray.tname << endl;
for (int j = 0; j < 5; j++) // 变量i改为j
{
cout << "学生姓名:" << tarray.sarray.sname
<< ",考试分数:" << tarray.sarray.score << endl;
}
}
}
希望这些修改能够帮助您解决问题。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]