43节从文本文件中读入数据!

这一讲是上一讲的拓展

例:编程序,实现文本文件的复制

代码分析:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fint,*fout;
    char c;
    if((fint=fopen("data.txt","r"))==NULL)
    {
        printf("File cannot oprn!");
        exit(0);
    }
    if((fout=fopen("target.txt","w"))==NULL)
    {
        printf("File cannot oprn!");
        exit(0);
    }
    while((c=fgetc(fint))!=EOF)
        fputc(c,fout);
        printf("结束复制!");
    fclose(fint);
    fclose(fout);
    return 0;
}


好的,以下是用 C 语言编写函数实现美食评分排序(从文本文件读入数据)的代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> struct food { char name[20]; float score; }; int cmp(const void *a, const void *b) { struct food *fa = (struct food *)a; struct food *fb = (struct food *)b; return (fa->score > fb->score) ? -1 : 1; } void sort_foods_by_score(char *filename) { FILE *fp = fopen(filename, "r"); if (fp == NULL) { printf("Error: Failed to open file %s\n", filename); return; } int max_foods = 100; struct food *foods = (struct food *)malloc(max_foods * sizeof(struct food)); int num_foods = 0; char line[50]; while (fgets(line, 50, fp) != NULL) { char *name = strtok(line, ","); char *score_str = strtok(NULL, ","); float score = atof(score_str); struct food f; strcpy(f.name, name); f.score = score; if (num_foods == max_foods) { max_foods *= 2; foods = (struct food *)realloc(foods, max_foods * sizeof(struct food)); } foods[num_foods++] = f; } fclose(fp); qsort(foods, num_foods, sizeof(struct food), cmp); printf("Sorted foods by score:\n"); for (int i = 0; i < num_foods; i++) { printf("%s: %.1f\n", foods[i].name, foods[i].score); } free(foods); } int main() { sort_foods_by_score("foods.txt"); return 0; } ``` 其,`struct food` 表示一个美食,包含两个成员:`name` 表示美食名称,`score` 表示美食评分。`cmp` 函数是一个比较函数,用于 `qsort` 函数对美食评分进行排序。`sort_foods_by_score` 函数用于从指定的文本文件读入美食数据,进行排序并输出结果。在实现,我们使用了动态内存分配,以便在读入的美食数量不断增加时,能够自动扩展内存空间。 请注意,这只是一个简单的示例代码,实际应用还需要考虑各种边界情况和异常处理,比如文件不存在、文件格式错误等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值