建立结构体数组,输入冬奥会各个国家奖牌数量,存储在文件“natial.txt” 中;读取文件数据,并按金牌数量排序,将排序后的结果存入一个新文件 “national_sort.txt”中,并查看结果与实际结果是否相符。
时间: 2023-07-14 20:13:55 浏览: 88
读取文件数字并排序最后输出另一个文件
5星 · 资源好评率100%
以下是一个示例代码,实现了上述要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20 // 国家名最大长度
#define NUM_COUNTRIES 10 // 国家数量
// 国家结构体
typedef struct {
char name[MAX_NAME_LEN]; // 国家名
int gold; // 金牌数
int silver; // 银牌数
int bronze; // 铜牌数
} Country;
// 比较函数,按金牌数从大到小排序
int cmp(const void* a, const void* b) {
return ((Country*)b)->gold - ((Country*)a)->gold;
}
int main() {
// 建立国家数组
Country countries[NUM_COUNTRIES];
// 输入各个国家奖牌数量并存入文件
FILE* fp = fopen("national.txt", "w");
for (int i = 0; i < NUM_COUNTRIES; i++) {
printf("请输入第%d个国家的名称和奖牌数量(金牌 银牌 铜牌):", i+1);
scanf("%s %d %d %d", countries[i].name, &countries[i].gold, &countries[i].silver, &countries[i].bronze);
fprintf(fp, "%s %d %d %d\n", countries[i].name, countries[i].gold, countries[i].silver, countries[i].bronze);
}
fclose(fp);
// 从文件中读取数据
fp = fopen("national.txt", "r");
for (int i = 0; i < NUM_COUNTRIES; i++) {
fscanf(fp, "%s %d %d %d", countries[i].name, &countries[i].gold, &countries[i].silver, &countries[i].bronze);
}
fclose(fp);
// 按金牌数排序
qsort(countries, NUM_COUNTRIES, sizeof(Country), cmp);
// 将排序后的结果存入新文件
fp = fopen("national_sort.txt", "w");
for (int i = 0; i < NUM_COUNTRIES; i++) {
fprintf(fp, "%s %d %d %d\n", countries[i].name, countries[i].gold, countries[i].silver, countries[i].bronze);
}
fclose(fp);
// 输出结果
printf("排序后的结果:\n");
for (int i = 0; i < NUM_COUNTRIES; i++) {
printf("%s %d %d %d\n", countries[i].name, countries[i].gold, countries[i].silver, countries[i].bronze);
}
return 0;
}
```
注意,上述代码中的排序算法使用了 C 标准库中的 `qsort` 函数,需要包含头文件 `stdlib.h`。另外,为了方便起见,本示例中所有数据都是手动输入的,实际应用中可以根据实际情况进行修改。
阅读全文