图书信息包括:书名、出版社、价格,从book.txt文件中读取5条图书信息,将其按照价格从低到高排序后,输出全部图书信息至bookpaixu.txt中,并在屏幕显示
需要看到你的book txt 什么样子 这几种信息之间怎么间隔?
下面是参考chatgpt的回答:
好的,以下是一个简单的示例程序,实现对书籍排序并输出到文件和屏幕上:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 5
typedef struct {
char name[50];
char publisher[50];
float price;
} Book;
// 比较函数,按照价格从小到大排序
int cmp_by_price(const void *a, const void *b) {
Book *bookA = (Book*) a;
Book *bookB = (Book*) b;
if (bookA->price < bookB->price) {
return -1;
} else if (bookA->price > bookB->price) {
return 1;
} else {
return 0;
}
}
int main() {
FILE *fp_in, *fp_out;
Book books[MAX_BOOKS];
int i;
// 从文件中读取书籍信息
fp_in = fopen("book.txt", "r");
if (fp_in == NULL) {
printf("Failed to open book.txt\n");
return 1;
}
for (i = 0; i < MAX_BOOKS; i++) {
fscanf(fp_in, "%s %s %f", books[i].name, books[i].publisher, &(books[i].price));
}
fclose(fp_in);
// 按照价格排序
qsort(books, MAX_BOOKS, sizeof(Book), cmp_by_price);
// 输出到文件和屏幕上
fp_out = fopen("bookpaixu.txt", "w");
if (fp_out == NULL) {
printf("Failed to open bookpaixu.txt\n");
return 1;
}
printf("书名\t出版社\t价格\n");
fprintf(fp_out, "书名\t出版社\t价格\n");
for (i = 0; i < MAX_BOOKS; i++) {
printf("%s\t%s\t%.2f\n", books[i].name, books[i].publisher, books[i].price);
fprintf(fp_out, "%s\t%s\t%.2f\n", books[i].name, books[i].publisher, books[i].price);
}
fclose(fp_out);
return 0;
}
假设book.txt中的数据格式为:
书名1 出版社1 10.50
书名2 出版社2 25.00
书名3 出版社1 17.80
书名4 出版社3 13.20
书名5 出版社2 20.50
程序会从book.txt中读取5条图书信息,按照价格从低到高进行排序,并输出到屏幕和bookpaixu.txt文件中。
以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:
这里是C语言实现的代码:
c
#include <stdio.h>
#include <string.h>
typedef struct {
char name[20];
char publisher[20];
int price;
} Book;
int main() {
Book books[5];
FILE *f = fopen("book.txt", "r");
for (int i = 0; i < 5; i++) {
fscanf(f, "%s %s %d", books[i].name, books[i].publisher, &books[i].price);
}
fclose(f);
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 5; j++) {
if (books[i].price > books[j].price) {
Book temp = books[i];
books[i] = books[j];
books[j] = temp;
}
}
}
FILE *f2 = fopen("bookpaixu.txt", "w");
for (int i = 0; i < 5; i++) {
fprintf(f2, "%s %s %d\n", books[i].name, books[i].publisher, books[i].price);
printf("%s %s %d\n", books[i].name, books[i].publisher, books[i].price);
}
fclose(f2);
}
代码实现步骤: