c语言读取txt文件中的价格表
时间: 2024-06-18 22:04:24 浏览: 136
在C语言中,可以使用fopen函数打开txt文件,使用fgets函数逐行读取文件内容,然后使用sscanf函数解析每行的数据。
以下是一个简单的示例代码,假设价格表的每一行都是以商品名称、商品价格为格式,中间用一个空格隔开:
```
#include <stdio.h>
int main() {
FILE *fp;
char buf[256];
char name[128];
float price;
fp = fopen("price_list.txt", "r");
if (fp == NULL) {
printf("Failed to open file.\n");
return -1;
}
while (fgets(buf, sizeof(buf), fp)) {
if (sscanf(buf, "%s %f", name, &price) == 2) {
printf("%s: %.2f\n", name, price);
}
}
fclose(fp);
return 0;
}
```
相关问题
C语言用链表实现从txt文件中读取菜品信息,顾客根据菜品信息完成对订单的增删改查,并输出txt文件
这是一个非常具体的问题,需要详细设计。首先需要定义菜品信息的数据结构,例如包含菜名、价格、描述等信息。然后使用链表数据结构将这些信息读入内存,顾客下单时对链表进行增删改查操作。最后将最终的订单信息输出到txt文件中。具体的代码实现涉及到文件操作、链表操作以及字符串处理等技术,需要进行详细设计和编写。
用C语言实现一个顺序表,用于保存"booktxt”中的书籍信息,功能包括创建顺序表将“book.txt”中的书籍信息读入顺序表中按价格查找书籍,并输出书籍名称,向顺序表中插入一本书的信息从顺序表中删除随机从顺序表中读取一本书信息
为了实现一个顺序表结构并完成您所描述的功能,我们首先需要定义一个结构体`Book`来存储书籍信息,然后创建一个`SequentialList`类来管理书籍列表。以下是基本的步骤:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义书籍信息结构体
typedef struct {
char title[100];
int price;
} Book;
// 顺序表结构体
typedef struct SequentialList {
Book* items; // 存储书籍的指针数组
size_t size; // 列表长度
size_t capacity; // 当前容量
} SequentialList;
// 创建顺序表
SequentialList* create_list() {
SequentialList* list = (SequentialList*)malloc(sizeof(SequentialList));
list->items = NULL;
list->size = 0;
list->capacity = 5; // 初始容量为5
return list;
}
// 从文件中读取书籍信息并添加到列表
void read_books_from_file(SequentialList* list, const char* filename) {
FILE* file = fopen(filename, "r");
if (!file) {
perror("Error opening file");
return;
}
while (fgets(list->items[list->size].title, sizeof(list->items[0].title), file)) {
list->items[list->size].price = atoi(fgets(NULL, sizeof(int), file)); // 假设价格在一行结束
list->size++;
if (list->size == list->capacity) {
resize_list(list);
}
}
fclose(file);
}
// 扩展顺序表容量
void resize_list(SequentialList* list) {
list->capacity *= 2;
list->items = (Book*)realloc(list->items, list->capacity * sizeof(Book));
}
// 按价格查找书籍
int find_book_by_price(SequentialList* list, int target_price) {
for (size_t i = 0; i < list->size; i++) {
if (list->items[i].price == target_price) {
return i;
}
}
return -1; // 如果未找到则返回-1
}
// 输出书籍名称
void print_book_title(SequentialList* list, int index) {
printf("Title: %s\n", list->items[index].title);
}
// 插入书籍信息
void insert_book(SequentialList* list, const char* title, int price) {
if (list->size == list->capacity) {
resize_list(list);
}
list->items[list->size].title = title;
list->items[list->size].price = price;
list->size++;
}
// 删除随机书籍
void delete_random_book(SequentialList* list) {
if (list->size <= 1) return;
size_t random_index = rand() % list->size;
memmove(&list->items[random_index], &list->items[random_index + 1], sizeof(Book) * (list->size - random_index - 1));
list->size--;
}
// 从顺序表中随机读取一本书信息
void read_random_book(SequentialList* list) {
if (list->size > 0) {
srand(time(NULL));
int random_index = find_book_by_price(list, rand() % (list->size * 2)); // 随机选择一个范围内的价格
if (random_index != -1) {
print_book_title(list, random_index);
} else {
printf("No book found with a random price.\n");
}
} else {
printf("List is empty.\n");
}
}
// 清理顺序表
void destroy_list(SequentialList* list) {
free(list->items);
free(list);
}
int main() {
SequentialList* bookList = create_list();
read_books_from_file(bookList, "book.txt"); // 假设book.txt存在
// 使用上述函数操作书籍列表...
destroy_list(bookList);
return 0;
}
```
阅读全文