我是靠谱客的博主 刻苦日记本,这篇文章主要介绍把原文件的学生进行排名后写回原文件,现在分享给大家,希望可以做个参考。

有一个记录学生信息的文件,每一行记录一名学生的信息,格式如下:
学号t 姓名t 性别t 分数 1t 分数 2t 分数 3n.

A. 要求读取文件的内容, 串成一个链表。

B. 按照总分递减排序将结果保存到原文件

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct stu { int num; char name[100]; char gender; int score1; int score2; int score3; int sum; struct stu *next; }Stu_t , *pStu_t; //插入链表结点:尾插 void tailInsert(pStu_t *Head , pStu_t *Tail , pStu_t p) { if (*Head == NULL)//空链表 { *Head = p; *Tail = p; } else { (*Tail)->next = p; *Tail = p; } } //数组元素是pStu_t, 递减排序 int cmp(const void *a , const void *b) { pStu_t *p1 = (pStu_t *) a; pStu_t *p2 = (pStu_t *) b; if ((*p1)->sum > (*p2)->sum) { return -1; } else if((*p1)->sum < (*p2)->sum) { return 1; } else { return 0; } } int main(int argc , char *argv[]) { FILE *fp = fopen(argv[4] , "rb"); if (fp == NULL) { perror("fopen:"); return -1; } pStu_t Head = NULL; pStu_t Tail = NULL; int count = 0;//学生信息的行数 while (!feof(fp)) { pStu_t p = (pStu_t) calloc(1 , sizeof(Stu_t)); //没有if判断,count会把算上最后的回车行 if (fscanf(fp , "%dt%st%ct%dt%dt%d" , &p->num , p->name , &p->gender , &p->score1 , &p->score2 , &p->score3) != EOF) { p->sum = p->score1 + p->score2 + p->score3; tailInsert(&Head , &Tail , p); count++; } } fclose(fp); //A是按总分递减存所有Stu_t结点指针的数组 pStu_t *A = (pStu_t *) calloc(1,count*sizeof(pStu_t)); pStu_t p = Head; int i = 0; while (p != NULL) { A[i++] = p; p = p->next; } qsort(A , count , sizeof(pStu_t) , cmp); //按照总分递减排序 fp = fopen(argv[4] , "wb"); if (fp == NULL) { perror("fopen:"); return -1; } //把按照总分递减排序的结果写回原文件 for (int i = 0; i < count; i++) { fprintf(fp , "%dt%st%ct%dt%dt%dn" , A[i]->num , A[i]->name , A[i]->gender , A[i]->score1 , A[i]->score2 , A[i]->score3); } fclose(fp); return 0; }

 

最后

以上就是刻苦日记本最近收集整理的关于把原文件的学生进行排名后写回原文件的全部内容,更多相关把原文件内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部