c语言 结构体 程序,有问题,运行没有结果。

//程序有问题
/*编写一个函数print,输出若干位学生的数据记录,有5位学生,每一位学生的数据记录包括学号(num),姓名(name),三门课的成绩(g[3]),
要求用主函数输入这些记录,用print函数输出这些记录。请编程实现。*/            
#include<stdio.h>
void print(int num,char name,float *t)
{
    int i;
    printf("%d\t%s\t",num,name);
    for(i=0;i<3;i++)
        printf("%f\t",*(t+i));
}
int main()
{
    int i,j;
    float b[3],*p;
    p=b;
    struct abc
    {
        int num;
        char name;
        float g[3];
    }a;
    for(i=0;i<5;i++)
    {
        printf("学号:\t姓名:\t语文:\t数学:\t英语:\n");
        scanf("%d%s",&a.num,&a.name);
        for(j=0;j<3;j++)
        {
            scanf("%f",&a.g[j]);
            b[j]=a.g[j];
        }
        print(a.num,a.name,p);
    }
    return 0;
}

#include<stdio.h>
void print(int num,char *name,float *t)//字符串要传地址
{
    int i;
    printf("%d\t%s\t",num,name);
    for(i=0;i<3;i++)
        printf("%f\t",*(t+i));
    printf("\n");
}
int main()
{
    int i,j;
    float b[3],*p;
    p=b;
    struct abc
    {
        int num;
        char name[10];//字符串用数组
        float g[3];
    }a;
    for(i=0;i<5;i++)
    {
        printf("学号:\t姓名:\t语文:\t数学:\t英语:\n");
        scanf("%d%s",&a.num,a.name);//字符串不需要加&
        for(j=0;j<3;j++)
        {
            scanf("%f",&a.g[j]);
            b[j]=a.g[j];
        }
        print(a.num,a.name,p);
    }
    return 0;
}

abc结构体中,char name只能存储字符,应该是char name[20]或者char *name(动态分配内存),同时print函数的char name也要改为char *name

主函数给你修改了一下

int main()
{
    int i,j;
    float b[3],*p;
    p=b;
    struct abc
    {
        int num;
        char name[N];
        float g[3];
    }a;
    for(i=0;i<5;i++)
    {
        printf("学号:\t姓名:\t语文:\t数学:\t英语:\n");
        scanf("%d %s",&a.num,a.name);
        for(j=0;j<3;j++)
        {
            scanf("%f",&a.g[j]);
            b[j]=a.g[j];
        }
        printf("%d %c %f",a.num,a.name,p);
    }
    return 0;
}

修改见注释,供参考:

//要求用主函数输入这些记录,用print函数输出这些记录。请编程实现。
#include<stdio.h>
struct abc
{
    int num;
    char name[16];   //char name;
    float g[3];
}a[5];       //a;
void print(int n, struct abc* t); //修改
int main()
{
    int i, j;
    //float b[3], * p;
    //p = b;
    printf("请输入 学号:姓名:语文:数学:英语:\n");
    for (i = 0; i < 5; i++)
    {
        scanf("%d%s", &a[i].num, a[i].name); //scanf("%d%s", &a[i].num, &a[i].name);
        for (j = 0; j < 3; j++)
        {
            scanf("%f", &a[i].g[j]);
            //b[j] = a[i].g[j];
        }
        //print(a[i].num, a[i].name, p);
    }
    print(5, a);  //修改
    return 0;
}
void print(int n, struct abc* t) //修改
{
    int i, j;
    printf("学号:\t姓名:\t语文:\t数学:\t英语:\n");
    //printf("%d\t%s\t", num, name);
    for (i = 0; i < n; i++){
        printf("%d\t%s\t",(t+i)->num,(t+i)->name);
        for (j = 0; j < 3; j++) {
            printf("%f\t", (t + i)->g[j]);
        }
        printf("\n");
    }

}