在C ++中将数据插入到文本文件中

时间:2017-09-16 08:31:01

标签: c++ file

我将数据插入文本文件text file used in C++ programme

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

这是程序

#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 << "\n\tName: ";
    cin.ignore();
    cin.getline(name, 50);

    cout << "\n\tID: ";
    cin >> id;
}

void Record::show_data() {
    cout << "\n\tName: ";
    cout << name;
    cout << "\n\tID: ";
    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();
}

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

1 个答案:

答案 0 :(得分:0)

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

ios::app是附加标志。请勿将其与ifstream一起使用。由于您正在阅读二进制数据,因此对ios::binaryofstream使用ifstream标记。

显然,您希望以文本形式保存数据(明智的选择)。使用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();
    }
}