首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手结构体的有关问题

2012-03-08 
新手求助:结构体的问题用一个函数输出学生成绩数组,数组中有5个学生的数据,学生包括num(学号)name(姓名)sc

新手求助:结构体的问题
用一个函数输出学生成绩数组,数组中有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;
}

上述程序运行良好,可以实现你的预期!但有一些问题留待你解决,比如学号字段的输入,如果用户输入了非数字的输入错误处理等等,但愿你对它进一步完善,以提高你的编程技术!

热点排行