c语言input和output

代码可以运行,但输入数据后数出数据为乱码,请各位给点修改意见


#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;    
}