新手求助:结构体的问题
用一个函数输出学生成绩数组,数组中有5个学生的数据,学生包括num(学号)name(姓名)score[3]
(3门课的成绩),主函数输入,函数输出这些数据,下面是我的程序,有问题,请各位指出一下,谢谢!
#include <iostream>
using namespace std;
struct student
{int num;
char name;
int score[3];
}stu[5];
void print( )
{
int i;
for (i=0;i <5;i++)
cout < <student.name < <student.name < <student.score[0]
< <student.score[1] < <student.score[2] < <endl;
}
int main()
{
void print( );
int i;
cout < < "input 5 students ' information: " < <endl;
for(i=0;i <5;i++)
cin> > student.name > > student.num > > student.score[0]
> > student.score[1] > > student.score[2];
return 0;
}
[解决办法]
首先,请允许我对你的 "新手 "程序作祥细的注释:
struct student
{int num;
char name;
int score[3];
}stu[5];
void print( )//这个函数看来预期输出所有stu结构变量数组包含的全部信息!
{
int i;;//不好的习惯,定义变量却不初始化!
for (i=0;i <5;i++)
/*
如下语句 "student. "会生成编译期错误类似 "student : 将此类型用作表达式非法! "
我使用VC7.1编译器,相信没有编译器会忽视该错误。
*/
cout < <student.name < <student.name < <student.score[0]
< <student.score[1] < <student.score[2] < <endl;
}
int main()
{
/*
如下语句是函数声明,而不是函数调用,如果是想调用该函数,但信息还没有输入,
stu还是空的,你将显示什么呢?
*/
void print( )
int i;//不好的习惯,定义变量却不初始化!
cout < < "input 5 students ' information: " < <endl;
/*
如下语句 "student. "会生成编译期错误类似 "student : 将此类型用作表达式非法! "
我使用VC7.1编译器,相信没有编译器会忽视该错误。
*/
for(i=0;i <5;i++)
cin> > student.name > > student.num > > student.score[0]
> > student.score[1] > > student.score[2];
return 0;
}
修改该程序如下:
struct student
{
int num;
char name;
int score[3];
}stu[5];
void print( )
{
for (long i=0;i <5;i++)//定义变量即初始化,且保持其局部性!
{
cout < < "学号: " < < stu[i].num < < endl
< < "学生姓名: " < < stu[i].name < < endl;//使用对象名寻址而不是类型名!
for(long x = 1; x <=3; ++x)//定义变量即初始化,且保持其局部性!
{
cout < < " 学习成绩 " < < x
< < ": " < < stu[i].score[x] < < "; ";
}
cout < < endl;
}
cout < < endl;
}
int main()
{
cout < < "input 5 students ' information: " < <endl;
for(long i=0;i <5;i++)//定义变量即初始化,且保持其局部性!
{
/*
如下语句块使用对象名寻址而不是类型名!,另外使用多个cout与cin对对
增加了代码的可读性。
*/
cout < < "输入学号: " < < endl;
cin > > stu[i].num;
cout < < "输入学生姓名: " < < endl;
cin > > stu[i].name;
cout < < "请分别输入三门学科成绩: " < < endl;
for(long x = 0; x <3; ++x)
{
cout < < x + 1 < < ": ";
cin > > stu[i].score[x];
}
cout < < endl;
}//至此,学生信息输入完毕!
print();//注意,是函数调用而不是函数声明,显示输入stu的全部信息!
_PAUSE;
return 0;
}
上述程序运行良好,可以实现你的预期!但有一些问题留待你解决,比如学号字段的输入,如果用户输入了非数字的输入错误处理等等,但愿你对它进一步完善,以提高你的编程技术!