重名大师 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日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址