用c ++编写结构到文本文件

时间:2018-06-13 22:20:21

标签: c++ structure

struct student{
        char name[20];
        char course[20];
        int age;
        float gpa;
    };

using namespace std;
main()
{
    ifstream infile;
    infile.open("student data.txt");
    ofstream outfile;
    outfile.open("student data 2.txt");
    if(!infile || !outfile)
    {
        cout << "error opening or creating file" << endl;
        exit(1);
    }

    student stu[2];
    infile.seekg(0, ios::beg);
    while(!infile.eof())
    {
    int i;
    for(i=0; i<=2; i++)
        {
            infile >> stu[i].name;
            infile >> stu[i].course;
            infile >> stu[i].age;
            infile >> stu[i].gpa;
        }
    }
    outfile.seekp(0, ios::beg);
    int i =0;
    while(i<3)
    {
        outfile << stu[i].name << endl;

        outfile << stu[i].course << endl;

        outfile << stu[i].age << endl;

        outfile << stu[i].gpa << endl;
        i++;
    }

    infile.close();
    outfile.close();
}

我试图弄清楚为什么这段代码不起作用...它没有给出任何编译错误但是当我运行应用程序时它停止工作。它说rough.exe(应用程序名称)不起作用。谁能帮忙:(

1 个答案:

答案 0 :(得分:0)

好吧,幸运的是这是一个非常简单的解决方案!您面临的问题与内存管理有关。这条线给你带来了麻烦:

student stu[2];

int i =0;
while(i<3)

基本上,你正在初始化类型为student的2个结构(索引0-1),然后期望迭代3个结构(来自索引0-2)。尝试读取第三个结构时,可能会出现内存访问冲突错误。

所以我在“student data.txt”中使用此文本运行代码

nasir CS201 23 3
Jamil CS201 31 4
Faisal CS201 25 3.5

当只初始化了两个结构时,“学生数据2”仍为空白。但是,当将值增加到student stu[3];时,“学生数据2.txt”会给出以下输出:

nasir
CS201
23
3
Jamil
CS201
31
4
Faisal
CS201
25
3.5

以下是我用来创建程序成功版本的代码,还有一些额外的printf用于调试目的。

#include <iostream>
#include <fstream>

    struct student {
    char name[20];
    char course[20];
    int age;
    float gpa;
};

using namespace std;
int main()
{
    ifstream infile;
    infile.open("student data.txt");
    ofstream outfile;
    outfile.open("student data 2.txt");
    if (!infile || !outfile)
    {
        cout << "error opening or creating file" << endl;
        exit(1);
    }

    student stu[3];                 //NOTE THIS LINE NOW HAS 3 STRUCTS INITIALIZED
    infile.seekg(0, ios::beg);
    while (!infile.eof())
    {
        int i;
        for (i = 0; i <= 2; i++)
        {
            infile >> stu[i].name;
            infile >> stu[i].course;
            infile >> stu[i].age;
            infile >> stu[i].gpa;
            printf("%s %s %d %f\n", stu[i].name, stu[i].course, stu[i].age, stu[i].gpa);
        }
    }

    outfile.seekp(0, ios::beg);
    int i = 0;
    while (i<3)
    {
        outfile << stu[i].name << endl;
        outfile << stu[i].course << endl;
        outfile << stu[i].age << endl;
        outfile << stu[i].gpa << endl;
        printf("%s %s %d %f\n", stu[i].name, stu[i].course, stu[i].age, stu[i].gpa);
        i++;
    }

    infile.close();
    outfile.close();
    return 1;
}

希望这有帮助!