重名大师 2023-04-13 20:37 采纳率: 96.6%
浏览 9
已结题

c语言把二进制文件里面的内容存到一个链表里面,再把链表里面的内容按格式放到文件里

二进制文件还是存txt
文件里面每行都含有两个字符串
链表结构体
struct time

char h[25];
char m[25];
struct time* next;

怎么把链表的内容存到txt并且变成二进制文件,在把里面的内容弄到文件里

  • 写回答

2条回答 默认 最新

  • Gary_HanJR 2023-04-13 20:56
    关注

    可以首先将链表数据写入文本文件,然后再将文本文件转换为二进制文件。可以按照以下步骤进行操作:

    遍历链表,将每个节点中的两个字符串依次写入文本文件中,每行包含一个字符串,两个字符串之间可以用空格或者其他分隔符进行分割。

    关闭文本文件。

    打开以二进制方式写入的文件。

    读取文本文件中的内容,将每个字符串转换为二进制后,依次写入二进制文件中。

    关闭二进制文件。

    以下是示例代码:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    struct time {
        char h[25];
        char m[25];
        time* next;
    };
    
    void writeToTextFile(time* head, const char* fileName) {
        ofstream outFile(fileName);
        if (!outFile.is_open()) {
            cout << "failed to open " << fileName << " for writing" << endl;
            return;
        }
    
        time* current = head;
        while (current != nullptr) {
            outFile << current->h << " " << current->m << endl;
            current = current->next;
        }
    
        outFile.close();
    }
    
    void convertTextFileToBinaryFile(const char* textFileName, const char* binaryFileName) {
        ifstream inFile(textFileName);
        if (!inFile.is_open()) {
            cout << "failed to open " << textFileName << " for reading" << endl;
            return;
        }
    
        ofstream outFile(binaryFileName, ios::binary);
        if (!outFile.is_open()) {
            cout << "failed to open " << binaryFileName << " for writing" << endl;
            inFile.close();
            return;
        }
    
        string h, m;
        while (inFile >> h >> m) {
            outFile.write(reinterpret_cast<const char*>(&h), sizeof(h));
            outFile.write(reinterpret_cast<const char*>(&m), sizeof(m));
        }
    
        inFile.close();
        outFile.close();
    }
    
    int main() {
        time* head = new time;
        time* current = head;
    
        current->next = new time{ "01", "30", nullptr };
        current = current->next;
        current->next = new time{ "12", "45", nullptr };
        current = current->next;
        current->next = new time{ "20", "59", nullptr };
    
        writeToTextFile(head->next, "times.txt");
        convertTextFileToBinaryFile("times.txt", "times.bin");
    
        return 0;
    }
    

    此代码会创建一个包含三个节点的链表,每个节点中包含两个字符串,分别为小时和分钟。然后,该代码将链表数据写入文本文件"times.txt",之后将文本文件转换为二进制文件"times.bin"。

    需要注意的是,在文本文件和二进制文件之间转换时,需要确保读写的方式要相同,这里使用的是"读文本写二进制"的方式。同时,也要注意文件存储路径和文件名的拼写,否则会导致文件读写失败。

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

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月17日
  • 创建了问题 4月13日

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法