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(应用程序名称)不起作用。谁能帮忙:(
答案 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;
}
希望这有帮助!