尝试从文本文件读取到对象数组
Trying to read from a text file to an object array
伙计们,我必须根据文本文件中的信息创建 5 个工作对象,如下所示
A 0 3
B 2 6
C 4 4
D 6 5
E 8 2
左边一栏是名称,下一栏是到达时间,最后一栏是持续时间
这就是我现在拥有的
#include <iostream>
#include <fstream>
#include "Job.hpp"
using namespace std;
int main(int argc, const char * argv[]) {
string fileinfo;
string programname;
//gets Jobs.txt from commandline
programname.append(argv[1]);
Job jobs[5];
fstream afile;
//reads in from the file to create job objects
afile.open(programname);
if(afile.fail()){
cout <<"file could not be opened " << programname <<endl;
}
while(!afile.eof())
{
getline(afile,fileinfo);
int i = 0;
//cout <<fileinfo[0] <<endl;//gets next letter
//cout <<fileinfo[2] <<endl;//gets next arrival time
//cout << fileinfo[4] <<endl;//gets next duration time
jobs[i].setletter(fileinfo[0]);
jobs[i].setarrivaltime(fileinfo[2]);
jobs[i].setduration(fileinfo[4]);
i++;
}
afile.close();
cout << jobs[1].getletter() <<endl;
cout << jobs[2].getletter() <<endl;
cout << jobs[3].getduration() <<endl;
现在,当我进入并打印出不同对象中的值(如代码底部)时,在我关闭文件后,它们都包含文件第一行的信息。
我不知道为什么,因为从技术上讲,我在设置作业的所有值后增加 'i',然后 fileinfo 获取文件的下一行,所以这对我来说似乎应该有效。
但是就像我从底部的那 3 个 cout 中得到的值一样,结果是
一个
一个
0
工作class
Job::Job(){}
Job::Job(char let, int arrive, int dura){
letter = let;
arrivaltime = arrive;
duration = dura;
}
并且它还定义了所有的 get 和 sets
那么你们能不能帮我正确地从文件中读取并创建我的对象数组
int i = 0;
每次循环,i
都会初始化为零。在将 i
初始化为 0 后,您的代码立即执行此操作:
jobs[i].setletter(fileinfo[0]);
jobs[i].setarrivaltime(fileinfo[2]);
jobs[i].setduration(fileinfo[4]);
i
在这里永远为零。这就是你所看到的。您的计算机将始终完全按照您的指示执行,而不是您希望它执行的操作。这是一个很好的经验法则,您要牢记在心,继续前进。
i++;
这无关紧要,因为在 while
循环的下一次迭代中,i
将再次初始化为 0。见上文。
while(!afile.eof())
还有,this is going to be your second bug,而且,你会在修复第一个错误后立即发现(在循环之前初始化 i
,而不是在循环内部)。
伙计们,我必须根据文本文件中的信息创建 5 个工作对象,如下所示
A 0 3
B 2 6
C 4 4
D 6 5
E 8 2
左边一栏是名称,下一栏是到达时间,最后一栏是持续时间 这就是我现在拥有的
#include <iostream>
#include <fstream>
#include "Job.hpp"
using namespace std;
int main(int argc, const char * argv[]) {
string fileinfo;
string programname;
//gets Jobs.txt from commandline
programname.append(argv[1]);
Job jobs[5];
fstream afile;
//reads in from the file to create job objects
afile.open(programname);
if(afile.fail()){
cout <<"file could not be opened " << programname <<endl;
}
while(!afile.eof())
{
getline(afile,fileinfo);
int i = 0;
//cout <<fileinfo[0] <<endl;//gets next letter
//cout <<fileinfo[2] <<endl;//gets next arrival time
//cout << fileinfo[4] <<endl;//gets next duration time
jobs[i].setletter(fileinfo[0]);
jobs[i].setarrivaltime(fileinfo[2]);
jobs[i].setduration(fileinfo[4]);
i++;
}
afile.close();
cout << jobs[1].getletter() <<endl;
cout << jobs[2].getletter() <<endl;
cout << jobs[3].getduration() <<endl;
现在,当我进入并打印出不同对象中的值(如代码底部)时,在我关闭文件后,它们都包含文件第一行的信息。 我不知道为什么,因为从技术上讲,我在设置作业的所有值后增加 'i',然后 fileinfo 获取文件的下一行,所以这对我来说似乎应该有效。 但是就像我从底部的那 3 个 cout 中得到的值一样,结果是
一个
一个
0
工作class
Job::Job(){}
Job::Job(char let, int arrive, int dura){
letter = let;
arrivaltime = arrive;
duration = dura;
}
并且它还定义了所有的 get 和 sets 那么你们能不能帮我正确地从文件中读取并创建我的对象数组
int i = 0;
每次循环,i
都会初始化为零。在将 i
初始化为 0 后,您的代码立即执行此操作:
jobs[i].setletter(fileinfo[0]);
jobs[i].setarrivaltime(fileinfo[2]);
jobs[i].setduration(fileinfo[4]);
i
在这里永远为零。这就是你所看到的。您的计算机将始终完全按照您的指示执行,而不是您希望它执行的操作。这是一个很好的经验法则,您要牢记在心,继续前进。
i++;
这无关紧要,因为在 while
循环的下一次迭代中,i
将再次初始化为 0。见上文。
while(!afile.eof())
还有,this is going to be your second bug,而且,你会在修复第一个错误后立即发现(在循环之前初始化 i
,而不是在循环内部)。