读书人

一个简单的程序有有关问题却不知道

发布时间: 2012-04-08 14:38:30 作者: rapoo

一个简单的程序,有问题,却不知道在哪里,前辈进来看看。
编一个结构体的程序,输入学生的编号,姓名,成绩(有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);    // 这个很重要} 

读书人网 >C语言

热点推荐