【问题标题】:Trying to read from a text file to an object array尝试从文本文件读取到对象数组
【发布时间】:2017-04-08 16:54:54
【问题描述】:

所以伙计们,我必须从一个看起来像这样的文本文件中的信息创建 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 个 couts 中得到的值一样,结果是

一个

一个

0

作业类

Job::Job(){}

Job::Job(char let, int arrive, int dura){
  letter = let;
  arrivaltime = arrive;
  duration = dura;
}

它还定义了所有的 get 和 sets 所以你们可以帮我正确地从文件中读取并创建我的对象数组

【问题讨论】:

  • 既然循环内带有“i”的部分是固定的,我所有的 int 值现在都在 ASCII 对应项中,那么如何将这些值转换为十进制整数?
  • 好吧,我也解决了这个问题,只是从每个值中减去 48

标签: c++ arrays file object fstream


【解决方案1】:
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,而不是在循环内部)。

【讨论】:

  • 感谢您修复了该部分
  • 现在我得到了每个对象的正确值,但是我想要的十进制值都是 ASCII 格式,那么我该如何转换它们呢?
  • @Yaboy93 有很多不同的方法。 Give std::stoi a look 看看是否满足您的需求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多