不懂,为什么printf执行不出来

总之就是printf语句执行不了,好奇怪
代码目的是输入5个学生数据,选出成绩最低的人(考虑重复情况)存入h指向的结构体数组中。
代码为:
#include<stdio.h>
#define N 5
struct student
{
int num;
double score;
}s[N];
int fun(struct student s[],struct student *h)
{
int total,i,j=0;
double min=100.0;
for(i=0;i<N;i++)
if(min>s[i].score) min=s[i].score;
for(i=0;i<N;i++)
if(s[i].score==min)
{
(h+j)->num=(s+i)->num;
(h+j)->score=(s+i)->score;
j++;
total++;
}
printf("min_score student:\n num\n");
for(i=0;i<total;i++)
printf(" %d %lf\n",h[i].num,h[i].score);
return total;
}
int main()
{
struct student *h;
int i;
for(i=0;i<N;i++)
scanf("%d %lf",&s[i].num,&s[i].score);
printf("total:%d\n",fun(s,h));
return 0;
}
看了网上方法却没用,而且不仅输出不了,本菜鸟也不知道如何在fun函数里面对h的数组进行赋值从而影响到外函数,试了指针也没用,外函数输出时是乱码的,求解!!


#include<stdio.h>
#define N 5
struct student
{
    int num;
    double score;
}s[N];
int fun(struct student s[], struct student* h)
{
    int total=0, i, j = 0;
    double min = 100.0;
    for (i = 0; i < N; i++)
        if (min > s[i].score) min = s[i].score;
    for (i = 0; i < N; i++)
        if (s[i].score == min)
        {
            (h + j)->num = (s + i)->num;
            (h + j)->score = (s + i)->score;
            j++;
            total++;
        }
    printf("min_score student:\n num\n");
    for (i = 0; i < total; i++)
        printf(" %d %lf\n", h[i].num, h[i].score);
    return total;
}
int main()
{
    struct student* h=new student;
    int i;
    for (i = 0; i < N; i++)
        scanf("%d %lf", &s[i].num, &s[i].score);
    printf("total:%d\n", fun(s, h));
    return 0;
}
#include<stdio.h>
#define N 5
struct student
{
    int num;
    double score;
} s[N];
int fun(struct student s[],struct student *h)
{
    int total=0,i,j=0;
    double min=s[0].score;
    for(i=0; i<N; i++)
        if(min>s[i].score) min=s[i].score;
    for(i=0; i<N; i++)
    {
        if(s[i].score==min)
        {
            h[i].num=s[i].num;
            h[i].score=s[i].score;

            total++;
        }
    }

    printf("min_score student:\n num\n");
    for(i=0; i<total; i++)
        printf(" %d %lf\n",h[i].num,h[i].score);
    return total;
}
int main()
{
    struct student *h;
    int i;
    for(i=0; i<N; i++)
        scanf("%d %lf",&s[i].num,&s[i].score);
    printf("total:%d\n",fun(s,h));
    return 0;
}

先改了这么多