如何将结构体变量的值通过指针写入到txt文件里啊?

10个学生,每个学生的数据包括学号、姓名、3门功课的成绩。从键盘输入10个学生的数据,要求按平均成绩降序显示出所有学生的数据(包括学号、姓名、3门课成绩、平均成绩),并将其写入文本文件result.txt中。

#include<stdio.h>
#include<stdlib.h>
#define n 10
struct Student
{
	int num;
	char name[20];
	float score[3];
	float aver;
};

void input(struct Student stu[])//输入学生数据
{
	printf("please input student's number , name ,score\n");
	for (int i = 0; i < n; i++)
	{
		scanf_s("%d %s %f %f %f", &stu[i].num, &stu[i].name,20, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
		stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
	}
}

void print(struct Student stu)//输出函数
{
	printf("student number:%d\nname:%s\nscore:%f %f %f\naver:%f\n ", stu.num, stu.name, stu.score[0], stu.score[1], stu.score[2], stu.aver);
}

void swap(struct Student* a, struct Student* b)//结构体数组交换位置
{
	struct Student temp;
	temp = *a;
	*a = *b;
	*b = temp;
	return;
}

void sort(struct Student stu[])//冒泡排序生成降序
{
	int b = 0;
	for (int i = 0; i < n; i++)
	{
		for (int a = 0; a < n - 1 - i; a++)
		{
			if (stu[a].aver < stu[a + 1].aver)
			{
				swap(&stu[a], &stu[a + 1]);//调用swap函数
			}
		}
	}
}

int main(void)
{
	int x;
	struct Student stu[n], * p = stu;
	input(p);
	sort(p);
	for (int i = 0; i < n; i++)
	{
		printf("\n");
		print(stu[i]);
	}
	FILE* fpwrite = fopen("result.txt", "w");
	if (fpwrite == NULL)
	{
		return 0;
	}
	for (int x = 0; x < n; x++);
	{
		fprintf(fpwrite, "student number:%d\nname:%s\nscore:%f %f %f\naver:%f\n ", stu.num, stu.name, stu.score[0], stu.score[1], stu.score[2], stu.aver);
	}
	return 0;
}

 

修改如下,供参考:

#include<stdio.h>
#include<stdlib.h>
#define n 10
struct Student
{
    int   num;
    char  name[20];
    float score[3];
    float aver;
};
void input(struct Student stu[])//输入学生数据
{
    printf("please input student's number , name ,score\n");
    for (int i = 0; i < n; i++)
    {
        //scanf_s("%d %s %f %f %f", &stu[i].num, &stu[i].name,20,
                  //&stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
        scanf_s("%d %s %f %f %f", &stu[i].num, stu[i].name,20,
                       &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
        stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
    }
}
void print(struct Student stu)//输出函数
{
    printf("student number:%d\nname:%s\nscore:%f %f %f\naver:%f\n ",
                stu.num, stu.name, stu.score[0], stu.score[1], stu.score[2], stu.aver);
}
void swap(struct Student* a, struct Student* b)//结构体数组交换位置
{
    struct Student temp;
    temp = *a;
    *a = *b;
    *b = temp;
    return;
}
void sort(struct Student stu[])//冒泡排序生成降序
{
    int b = 0;
    for (int i = 0; i < n - 1; i++)  //for (int i = 0; i < n; i++)
    {
        for (int a = 0; a < n - 1 - i; a++)
        {
            if (stu[a].aver < stu[a + 1].aver)  
            {
                swap(&stu[a], &stu[a + 1]);//调用swap函数
            }
        }
    }
}
int main(void)
{
    int x;
    struct Student stu[n], * p = stu;
    input(p);
    sort(p);
    for (int i = 0; i < n; i++)
    {
        printf("\n");
        print(stu[i]);
    }
    FILE* fpwrite = fopen("result.txt", "w");
    if (fpwrite == NULL)
    {
        return 0;
    }
    for (x = 0; x < n; x++) //for (int x = 0; x < n; x++); 修改
    {
                //fprintf(fpwrite, "student number:%d\nname:%s\nscore:%f %f %f\naver:%f\n ",
                       //stu.num, stu.name, stu.score[0], stu.score[1], stu.score[2], stu.aver);
        fprintf(fpwrite, "%d %s %f %f %f %f\n", stu[x].num, stu[x].name,stu[x].score[0],
                                              stu[x].score[1], stu[x].score[2], stu[x].aver);
    }
    fclose(fpwrite);
    return 0;
}