这是一道C语言题:input()和output()函数输入,输出5个学生的数据记录。 帮我看看哪错了吧。

#include <stdio.h>
#define n 5
struct student_info
{
char name[20];
int age;
int gender;
int chinese;
int math;
int english;
};
void input(struct student_info[n]);
void output(struct student_info[n]);
void main()
{
struct student_info stu[n];
void input(stu);
void output(stu);
}
void input(struct student_info stu)
{
int i;
for(i=0;i<5;i++)
{
printf("请输入第%d个学生的姓名\n",i+1);
getche("%8s",stu[i].name);
printf("请输入第%d个学生的语文成绩:\n",i+1);
scanf("%d",&stu[i].chinese);
printf("请输入第%d个学生的数学成绩:\n",i+1);
scanf("%d",&stu[i].math);
printf("请输入第%d个学生的英语成绩:\n",i+1);
scanf("%d",&stu[i].english);
printf("请输入第%d个学生的年龄:\n",i+1);
scanf("%d",&stu[i].age);
printf("请输入第%d个学生的性别:<输入0(男)或1(女)>\n",i+1);
scanf("%d",&stu[i].gender);
}
}
void output(struct student_info stu);
{
int i;
printf("姓名 性别 年龄 语文 数学 英语 \n");
for(i=0;i<n;i++)
{
printf("%8s%8d%8d%8d%8d%8d",stu[i].name,stu[i].gender,stu[i].age,stu[i].chinese,stu[i].math,stu[i].english);
}
}

楼主你好。
以下是我修改的代码,已经可以正常运行,修改以注释的形式给出。
#include <stdio.h>
#define N 2
typedef struct _student_info//这里你也可以写student_info,但是对新手容易产生歧义
{
char name[20];
int age;
int gender;
int chinese;
int math;
int english;
}student_info;//这样你就可以省略struct了
void input(student_info[]);//这是声明
void output(student_info[]);
void main()
{
student_info stu[N]={0};
input(stu);//这才是调用
output(stu);
}
void input(student_info stu[])
{
int i;
for(i=0;i<N;i++)//这里应该是N才更严谨
{
printf("请输入第%d个学生的姓名\n",i+1);
scanf("%8s",&stu[i].name);
printf("请输入第%d个学生的语文成绩:\n",i+1);
scanf("%d",&stu[i].chinese);
printf("请输入第%d个学生的数学成绩:\n",i+1);
scanf("%d",&stu[i].math);
printf("请输入第%d个学生的英语成绩:\n",i+1);
scanf("%d",&stu[i].english);
printf("请输入第%d个学生的年龄:\n",i+1);
scanf("%d",&stu[i].age);
printf("请输入第%d个学生的性别:<输入0(男)或1(女)>\n",i+1);
scanf("%d",&stu[i].gender);
}
}

void output(student_info stu[])//原来这里多了分号
{
int i;
printf("姓名 性别 年龄 语文 数学 英语 \n");
for(i=0;i<N;i++)
{
printf("%8s%8d%8d%8d%8d%8d\n",stu[i].name,stu[i].gender,stu[i].age,stu[i].chinese,stu[i].math,stu[i].english);
}
}
输出:(我把N改成2,测试方便)
请输入第1个学生的姓名
张三
请输入第1个学生的语文成绩:
1
请输入第1个学生的数学成绩:
1
请输入第1个学生的英语成绩:
1
请输入第1个学生的年龄:
1
请输入第1个学生的性别:<输入0(男)或1(女)>
1
请输入第2个学生的姓名
李四
请输入第2个学生的语文成绩:
2
请输入第2个学生的数学成绩:
2
请输入第2个学生的英语成绩:
2
请输入第2个学生的年龄:
2
请输入第2个学生的性别:<输入0(男)或1(女)>
0
姓名 性别 年龄 语文 数学 英语
张三 1 1 1 1 1
李四 0 2 2 2 2
Press any key to continue
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-02
#include <stdio.h>
#define n 1
struct student_info
{ char name[20];
int age;
int gender;
int chinese;
int math;
int english;
};
void input(struct student_info stu[]);
void output(struct student_info stu[]);
int main(void)
{

struct student_info stu[n];

input(stu);

output(stu);

return 0;
}
void input(struct student_info stu[])
{
int i;
for(i=0;i<n;i++)
{

printf("请输入第%d个学生的姓名\n",i+1);

scanf("%s",stu[i].name);
printf("请输入第%d个学生的语文成绩:\n",i+1);
scanf("%d",&stu[i].chinese);
printf("请输入第%d个学生的数学成绩:\n",i+1);
scanf("%d",&stu[i].math);
printf("请输入第%d个学生的英语成绩:\n",i+1);
scanf("%d",&stu[i].english);
printf("请输入第%d个学生的年龄:\n",i+1);
scanf("%d",&stu[i].age);
printf("请输入第%d个学生的性别:<输入0(男)或1(女)>\n",i+1);
scanf("%d",&stu[i].gender);
}
}
void output(struct student_info stu[])
{
int i;
printf("姓名 性别 年龄 语文 数学 英语 \n");
for(i=0;i<n;i++)
{

printf("%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].name,stu[i].gender,stu[i].age,stu[i].chinese,stu[i].math,stu[i].english);

}
}
第2个回答  2012-12-12
我觉得是上面的两个函数的声明错了,去掉里面的两个n试下
相似回答