c语言:图书信息包括:书名、出版社、价格,从book.txt文件中读取5条图书信息,将其按照价格从低到高排序后,输出全部图书信息至bookpaixu.txt中,并在屏幕显示
时间: 2023-07-15 09:12:12 浏览: 176
以下是基于C语言的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 5
#define MAX_TITLE_LENGTH 50
#define MAX_PUBLISHER_LENGTH 30
typedef struct {
char title[MAX_TITLE_LENGTH];
char publisher[MAX_PUBLISHER_LENGTH];
float price;
} Book;
int compare(const void *a, const void *b) {
const Book *bookA = (const Book *)a;
const Book *bookB = (const Book *)b;
if (bookA->price < bookB->price) {
return -1;
} else if (bookA->price > bookB->price) {
return 1;
} else {
return 0;
}
}
int main() {
FILE *fp;
char *filename = "book.txt";
Book books[MAX_BOOKS];
// 打开文件并读取图书信息
fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件 %s\n", filename);
return 1;
}
int i = 0;
while (fscanf(fp, "%s %s %f", books[i].title, books[i].publisher, &books[i].price) == 3) {
i++;
if (i >= MAX_BOOKS) {
break;
}
}
fclose(fp);
// 对图书信息按照价格排序
qsort(books, i, sizeof(Book), compare);
// 将排序后的图书信息输出到文件和屏幕
filename = "bookpaixu.txt";
fp = fopen(filename, "w");
if (fp == NULL) {
printf("无法打开文件 %s\n", filename);
return 1;
}
printf("排序后的图书信息:\n");
for (int j = 0; j < i; j++) {
printf("%s %s %.2f\n", books[j].title, books[j].publisher, books[j].price);
fprintf(fp, "%s %s %.2f\n", books[j].title, books[j].publisher, books[j].price);
}
fclose(fp);
return 0;
}
```
代码中使用了结构体 `Book` 来存储图书信息,定义了一个 `compare` 函数来比较两个图书的价格大小,使用 `qsort` 函数对图书信息进行排序,最终将排序后的图书信息输出到文件和屏幕上。注意,在打开文件时需要进行错误检查,防止出现文件打开失败的情况。
阅读全文