Destiny_ing 2024-05-30 16:15 采纳率: 71%
浏览 2
已结题

为啥运行栏里啥东西也没有?

img

img

img


在主函数中增添了一个read函数,从文件中读取数据,程序就运行出个空。
如何修改使程序完成从文件中读取,并经过一系列功能之后,输出在一个新文件里?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-30 16:15
    关注

    引自免费微信小程序:皆我百晓生

    为了帮助您解决这个问题,首先我们需要对代码进行一些调整。看起来您想要实现的功能是读取一个名为 "6.txt" 的文件中的数据,然后在用户操作后将结果保存到另一个名为 "8.txt" 的文件中。根据提供的部分代码,我将为您整理并修复这段代码,以便它能正常工作。

    首先,我们注意到 read() 函数中的 feof 检查位置有误,这会导致读取过程中出现问题。我们需要在每次读取之后检查是否到达文件末尾。另外,在 SaveScore() 函数中,您应该先写入所有联系人信息后再关闭文件。这里是一个修改后的代码示例:

    #include <stdio.h>
    #include <string.h>
    
    #define max 100 // 最大联系人数
    
    typedef struct stu {
        char name[50];
        char sex[10];
        int dianhua;
        float year;
        char leibie[20];
    } stu;
    
    typedef struct txl {
        stu sz[max];
        int size;
    } txl;
    
    void read(txl *qw) {
        FILE *fp;
        int i = 0;
    
        fp = fopen("6.txt", "r");
        if (fp == NULL) {
            printf("打开文件失败!\n");
            return;
        }
    
        while (!feof(fp)) {
            fscanf(fp, "%s", qw->sz[i].name);
            fscanf(fp, "%s", qw->sz[i].sex);
            fscanf(fp, "%d", &qw->sz[i].dianhua);
            fscanf(fp, "%f", &qw->sz[i].year);
            fscanf(fp, "%s", qw->sz[i].leibie);
    
            i++;
            if (i >= max) { // 防止数组越界
                break;
            }
        }
    
        fclose(fp);
        qw->size = i;
    }
    
    void SaveScore(txl qw) {
        FILE *fp;
    
        fp = fopen("8.txt", "w");
        if (fp == NULL) {
            printf("打开文件失败!\n");
            exit(0);
        }
    
        for (int i = 0; i < qw.size; i++) {
            fprintf(fp, "%s\t", qw.sz[i].name);
            fprintf(fp, "%s\t", qw.sz[i].sex);
            fprintf(fp, "%d\t", qw.sz[i].dianhua);
            fprintf(fp, "%f\t", qw.sz[i].year);
            fprintf(fp, "%s\n", qw.sz[i].leibie);
        }
    
        fclose(fp);
    }
    
    int main() {
        txl qw;
        qw.size = 0;
    
        read(&qw); // 读取文件数据
        qw.size = 0; // 这行代码多余,已由read函数更新大小
    
        // ... 其他菜单选项和用户交互代码
    
        SaveScore(qw); // 在完成一系列操作后,保存数据到新文件
    
        return 0;
    }
    

    这个修改过的代码首先定义了结构体和类型别名,然后在 read()SaveScore() 函数中分别处理文件读取和写入。在 main() 函数中,我们调用 read() 函数读取数据到 qw 结构体,然后在用户操作完成后调用 SaveScore() 将数据保存到新的文件中。注意,这里仅包含了读取和保存文件的部分,其他菜单选项和用户交互的代码没有提供,您可以按照之前的逻辑添加这些部分。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 创建了问题 5月30日

悬赏问题

  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥35 跳过我的世界插件ip验证
  • ¥15 抖音看过的视频,缓存在哪个文件
  • ¥15 自定义损失函数报输入参数的数目不足
  • ¥15 如果我想学习C大家有是的的资料吗
  • ¥15 根据文件名称对文件进行排序
  • ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
  • ¥15 有人会用py或者r画这种图吗