一个简单的程序,有问题,却不知道在哪里,前辈进来看看。
编一个结构体的程序,输入学生的编号,姓名,成绩(有3门)
如下:
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[20];
float socre[3];
};
void main(){
struct student stu[5];
int i;
struct student input();
for(i=0;i<2;i++)
{stu[i].num=i;stu[i]=input();}
for(i=0;i<2;i++)
printf("%3d%s%6.2f%6.2f%6.2f\n",stu[i].num,stu[i].name,stu[i].socre[0],stu[i].socre[1],stu[i].socre[2]);
}
struct student input(){
int i;
struct student stu;
gets(stu.name);
for(i=0;i<3;i++)
scanf("%f",&stu.socre[i]);
return stu;}
为了简单起见,我只想输入2个学生的成绩
可是运行的时候,要输入3个才能输出
而且输出结果除开第一个外,后面的编号变成了浮点型,却出现一大串某明其妙的数字。望指教!
[解决办法]
楼主的代码中有几个比较严重的概念理解方面的问题,比如,
1. 在main函数中已经定义了:
struct student stu[5];
然后,在下面的循环中
for(i=0;i<2;i++)
{stu[i].num=i; stu[i]=input();}
的第一句,给stu[i]分配了学号,但是在stu[i] = input();中的input函数里面又用
struct student stu;
重新定义了一个student变量stu,这个stu和前面提到数组中的stu[i]一点关系都没有,虽然input返回后
stu[i] = input();即你试图将input返回的student变量赋给stu[i],但在input中没有给stu[i]设定学号,所以不出现大数字就不正常了:)
2. 要注意用fflush(stdin);清除输入状态
3. 不建议在函数内声明另外一个函数
请参考下面的代码:
- C/C++ code
#include <stdio.h>#include <stdlib.h>struct student{ int num; char name[20]; float socre[3];};void input(struct student stu[], int number);void main(){ struct student stu[5]; int i; for(i = 0; i < 2; i++) { input(stu, i); } for(i = 0; i < 2; i++) printf("%3d\t%s%6.2f%6.2f%6.2f\n",stu[i].num,stu[i].name,stu[i].socre[0],stu[i].socre[1],stu[i].socre[2]);}void input(struct student stu[], int number){ int i; stu[number].num = number; gets(stu[number].name); for(i = 0; i < 3; i++) { scanf("%f", &stu[number].socre[i]); } fflush(stdin); // 这个很重要}