代码可以运行,但输入数据后数出数据为乱码,请各位给点修改意见
#include<stdio.h>
struct hwfstudent
{
int num;
char name[10];
int c,oop,db;
float avg;
};
void input()
{
int n,i;
struct hwfstudent s,s1,s2,s3;
printf("请输入学生人数:",n);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("第%d个学生:\n",i);
printf("学号 姓名 C语言 OOP 数据库\n");
scanf("%d%s%d%d%d",&s.num,&s.name,&s.c,&s.oop,&s.db);
s.avg=(float)(s.c+s.oop+s.db)/3;
if(i==1)
s1=s;
else if(i==2)
s2=s;
else
s3=s;
}
}
void output()
{
struct hwfstudent s,s1,s2,s3;
printf("输出学生信息\n");
printf("\n学号 姓名 C语言 OOP 数据库 平均成绩\n");
printf("%-10d%-10s%-8d%-8d%-8d%-6.1f\n",s.num,s.name,s.c,s.oop,s.db,s.avg);
printf("%-10d%-10s%-8d%-8d%-8d%-6.1f\n",s1.num,s1.name,s1.c,s1.oop,s1.db,s1.avg);
printf("%-10d%-10s%-8d%-8d%-8d%-6.1f\n",s2.num,s2.name,s2.c,s2.oop,s2.db,s2.avg);
}
int main()
{
void input();
void output();
input();
output();
return 0;
}
感觉这好像就相对于
void input(){int i; scanf("%d", &i);}
void output{int i; printf("%d\n", i);}
两个函数里的 i 不是同一个,
解决:input和output函数里不再定义s,s1,s2,s3
1.把s,s1,s2,s3定义成全局变量,
比如struct hwfstudent{...}s,s1,s2,s3;
再比如struct hwfstudent{...};struct hwfstudent s,s1,s2,s3;
2.在main函数里定义s,s1,s2,s3,然后当参数传入input和output函数
然后上面回答里说的scanf存入字符串数组s.name前不用加&
你用的是什么编译器和开发环境?这种一般是编码问题,设置下就好了。
1.for循环里,scanf那里有错误,第二个参数前面的&去掉
2.结构体里面参数要分别定义,c,oop和db分别定义为int,不要放在一起定义。
3.main函数里的两个函数声明可以注释掉,
希望对你有帮助
修改如下,供参考:
#include<stdio.h>
#define N 100 // 修改
struct hwfstudent
{
int num;
char name[10];
int c,oop,db;
float avg;
};
void input(struct hwfstudent s[], int n) // 修改
{
int i;
//struct hwfstudent s,s1,s2,s3;
for(i = 0;i < n;i++) //for(i=1;i<=n;i++) 修改
{
printf("第%d个学生:\n",i + 1); // 修改
printf("学号 姓名 C语言 OOP 数据库\n");
scanf("%d%s%d%d%d",&s[i].num,s[i].name,&s[i].c,&s[i].oop,&s[i].db); // 修改
s[i].avg=(float)(s[i].c+s[i].oop+s[i].db)/3.0; // 修改
//if(i==1)
// s1=s;
//else if(i==2)
// s2=s;
//else
// s3=s;
}
}
void output(struct hwfstudent s[], int n) // 修改
{
int i; // 修改
//struct hwfstudent s,s1,s2,s3;// 修改
printf("输出学生信息\n");
printf("\n学号 姓名 C语言 OOP 数据库 平均成绩\n");
for (i = 0;i < n; i++) // 修改
printf("%-10d%-10s%-8d%-8d%-8d%-6.1f\n",s[i].num,s[i].name,s[i].c,s[i].oop,s[i].db,s[i].avg);
//printf("%-10d%-10s%-8d%-8d%-8d%-6.1f\n",s1.num,s1.name,s1.c,s1.oop,s1.db,s1.avg); // 修改
//printf("%-10d%-10s%-8d%-8d%-8d%-6.1f\n",s2.num,s2.name,s2.c,s2.oop,s2.db,s2.avg); // 修改
}
int main()
{
struct hwfstudent s[N]; // 修改 定义结构体数组
int n;
printf("请输入学生人数:");
scanf("%d", &n); // 修改 输入学生人数
//void input();
//void output();
input(s, n); // 修改
output(s, n); // 修改
return 0;
}