2301_76648344 2023-11-18 00:10 采纳率: 20%
浏览 20
已结题

c++文件读写 信息增加 按照提示补全代码

```

#include <bits/stdc++.h>
#define MAXSIZE 10000
using namespace std;
typedef struct{
char name[100]; // 中文名称
char sname[100]; // 英文名称
char health[10000]; // 养生功效
char nutrition[10000]; // 营养与功效
char expert[10000]; // 专家提醒
char link[10000]; // 相关链接
string recipe[30]; // 养生保健食谱
int recipe_size = 0; // 食谱数量
string therapy[30]; // 食疗验方
int therapy_size = 0; // 验方数量
} Food;
typedef struct{
Food *elem; // 指向数组的指针
int length; // 数组的长度
} SqList;

void InitList(SqList &L){
// 使用动态内存分配new进行初始化
L.elem=new Food[MAXSIZE];
L.length=0;
}

void FreeList(SqList &L){
// 释放内存
if(L.elem!=NULL){
free(L.elem);
}
L.elem = NULL;
L.length = 0;
}

void ReadFile(SqList &L, string filename){
// 从文件中读取食材信息,将其按顺序存入L.elem指向的数组中
}

void SaveFile(SqList &L, string filename){
// 保存食材信息到文件

}

bool InsertFood(SqList &L){
// 插入食材信息,输入食材中文名称、英文名称、养生功效、营养与功效、养生保健食谱和食疗验方信息
// 如果插入成功,返回true,否则,返回false

}

void Print(SqList &L){
// 输出食材信息

}
int main(){
SqList L;
InitList(L);
string originFilename = "/data/workspace/myshixun/1.1.1-食材信息增加/food.txt";
string newFilename = "/data/workspace/myshixun/1.1.1-食材信息增加/new_food.txt";
ReadFile(L, originFilename);
if (InsertFood(L)){
SaveFile(L, newFilename);
ReadFile(L, newFilename);
Print(L);
}
else{
cout << "增加失败" << endl;
}
FreeList(L);
return 0;
}

```输入食材中文名称、英文名称、养生功效、营养与功效、专家提醒、相关链接、食谱数量、养生保健食谱、验方数量和食疗验方信息,将该食材的基本信息添加到food.txt中的最后。新增成功后,输出food.txt的最后一行即新增食材信息。(注:由于食材中文名称是唯一的,因此在增加时需要判断该中文名称是否存在于food.txt中,若存在,则输出“增加失败”。)

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-11-18 00:11
    关注

    引自强大而免费的微信小程序:皆我百晓生

    下面是根据注释提示给出的四个函数的代码补全:

    void ReadFile(SqList &L, string filename){
        // 从文件中读取食材信息,将其按顺序存入L.elem指向的数组中
        ifstream fin(filename);
        if (!fin) {
            cout << "文件打开失败" << endl;
            return;
        }
        char line[MAXSIZE];
        while(fin.getline(line, MAXSIZE)){
            if (line[0] == '\0') {
                break;
            }
            Food food;
            sscanf(line, "%s %s %s %s %s %s", food.name, food.sname, food.health, food.nutrition, food.expert, food.link);
            L.elem[L.length] = food;
            L.length++;
        }
        fin.close();
    }
    
    void SaveFile(SqList &L, string filename){
        // 保存食材信息到文件
        ofstream fout(filename);
        if (!fout) {
            cout << "文件打开失败" << endl;
            return;
        }
        for (int i = 0; i < L.length; i++) {
            Food food = L.elem[i];
            fout << food.name << " " << food.sname << " " << food.health << " " << food.nutrition << " " << food.expert << " " << food.link << endl;
        }
        fout.close();
    }
    
    bool InsertFood(SqList &L, int pos, Food *food){
        // 插入食材信息,输入食材中文名称、英文名称、养生功效、营养与功效、养生保健食谱和食疗验方信息
        // 如果插入成功,返回true,否则,返回false
        for (int i = 0; i < L.length; i++) {
            if (strcmp(food->name, L.elem[i].name) == 0) {
                cout << "增加失败" << endl;
                return false;
            }
        }
        if (L.length == MAXSIZE) {
            cout << "增加失败" << endl;
            return false;
        }
        L.elem[L.length] = *food;
        L.length++;
        return true;
    }
    
    void Print(SqList &L){
        // 输出食材信息
        for (int i = 0; i < L.length; i++) {
            Food food = L.elem[i];
            cout << food.name << " " << food.sname << " " << food.health << " " << food.nutrition << " " << food.expert << " " << food.link << endl;
        }
    }
    

    需要注意的是,上述代码中使用了 C 语言的字符串处理函数 strcpystrcmp,需要包含头文件 <cstring>。此外,函数 InsertFood 需要判断插入的食材中文名称是否已存在于数组中,若存在,则输出"增加失败"。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月18日
  • 修改了问题 11月18日
  • 修改了问题 11月18日
  • 修改了问题 11月18日
  • 展开全部

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络