将数据插入C 中的文本文件中

Inserting Data into text file in C++

本文关键字:文件 文本 数据 插入      更新时间:2023-10-16

i将数据插入C 程序中使用的文本文件

数据是这样的,但应该以可读形式。

这是程序

#include<iostream>
#include <fstream>
#include <Windows.h>
#include <string>
using namespace std;
class Record {
    private:
        int id;
        char name[50];
    public:
        void insert_data();
        void show_data();
};
void Record::insert_data() {
    cout << "ntName: ";
    cin.ignore();
    cin.getline(name, 50);
    cout << "ntID: ";
    cin >> id;
}
void Record::show_data() {
    cout << "ntName: ";
    cout << name;
    cout << "ntID: ";
    cout << id;
}
void write_info();
void show_info();
int main() {
    //write_info();
    show_info();
    cout << endl;
    system("pause");
}
void write_info() {
    Record info;
    ofstream data("data.txt", ios::app);
    info.insert_data();
    data.write((char *)(&info), sizeof(Record));
    data.close();
} // Function Ends here
void show_info() {
    Record info;
    ifstream data("data.txt", ios::app);
    data.read((char *)(&info), sizeof(Record));
    info.show_data();
    data.close();
}

为什么将这种类型的数据(不可读取)输入文本文件?请检查我的程序,如果由于此不可读取数据而出现错误在文本文件中。

ifstream data("data.txt", ios::app);

ios::app是附录标志。不要与ifstream一起使用。由于您正在读取二进制数据,因此使用ios::binary标志ofstreamifstream

显然,您想将数据保存在文本形式(明智的选择)中。使用data >> info.namedata >> info.id代替编写数据。

您也可以使用std::string name而不是char name[50]。如果要阅读整行,请使用std::getline

class Record {
public:
    int id;
    std::string name;
    void Record::insert_data() {
        cout << "Name: ";
        getline(cin, name); //reads the whole line
        cout << "ID: ";
        cin >> id;
    }
    void Record::show_data() {
        cout << "Name: " << name << ", ID: " << id << "n";
    }
};
void write_info() {
    Record info;
    info.insert_data();
    ofstream data("data.txt", ios::app);
    data << info.name << "n" << info.id << "n";
} 
void show_info() {
    Record info;
    ifstream data("data.txt");
    while(true) {
        if(!data.good()) break;
        data >> info.name;
        if(!data.good()) break;
        data >> info.id;
        info.show_data();
    }
}