从文本文件读取到类对象(C ++)

时间:2016-07-25 12:04:04

标签: c++

我对我的代码有疑问。我想从文本文件中获取信息并将该信息分配给类对象。我将在稍后使用来自对象的信息来编写程序。

我的文本文件如下所示:

df <- df[order(factor(df$b, levels ='ws_12')),]
df[!duplicated(df$a),]
#  a     b
#1 A ws_12
#3 B ws_12
#4 C ws_12
#6 D ws_12
#7 E dr_12

其中第一列表示ID#,类型,处理时间1,处理时间2.

这是我的代码:

984763 A 20 18
762613 A 19 17
587123 A 22 16
897654 D 85 19

输出为我提供了文本文件中的第一个元素(984763),其余部分则没有。似乎文件正在打开,但我的代码有问题。有什么帮助吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

编写代码时,了解您所编写的内容及其原因非常重要。 但在这里,让我举个例子:

在每个#include之前移除了额外的TAB,为了漂亮

使用命名空间std删除,不需要。

删除了private:,默认情况下,类成员是私有的。

固定类成员外壳,使它们彼此一致。

将字符串类型更改为char类型,因为它包含单个字符。 将double更改为int,因为该文件包含整数。 更改了getXX函数的签名,如果它们意味着“获取”它们应该返回一个值并且不带参数。 对它们进行内联编码,并返回相应的私有成员值。 也将它们重命名为一致。 添加了内联函数集。

将卡车重新命名为卡车,因为它代表了一辆卡车。

仅宣布变辆车一次。

删除int i = 0;因为它已在for循环中声明;

将i ++改为++ i,它更好一点。 将id,type,feeder_pt和axle_pt变量声明移动到循环内部。 在“myfile&gt;&gt; ...”中添加了类型以便将其读取

删除了重复的“cout&lt;&lt; axle_pt” 添加了cout&lt;&lt; feeder_pt 添加了输出整个卡车阵列的代码。

#include <iostream>
#include <fstream>

class Truck {
    int id;
    char type;
    int feeder_pt;
    int axle_pt;

public:
    int getID() { return id; }
    char getType() { return type; }
    int getFeeder() { return feeder_pt; }
    int getAxle() { return axle_pt; }
    void setID(int id) { this->id = id; }
    void setType(char type) { this->type = type; }
    void setFeeder(int feeder_pt) { this->feeder_pt = feeder_pt; }
    void setAxle(int axle_pt) { this->axle_pt = axle_pt; }
};

int main () 
{
    std::ifstream myfile("sequence.txt");

    Truck trucks[4];

    for(int i=0; i<4; ++i)
    {
        int id;
        char type;
        int feeder_pt;
        int axle_pt;

        myfile >> id >> type >> feeder_pt >> axle_pt;

        trucks[i].setID(id);
        trucks[i].setType(type);
        trucks[i].setFeeder(feeder_pt);
        trucks[i].setAxle(axle_pt);
    }

    // to test only
    for(int i=0; i<4; ++i)
        std::cout << "ID: " << trucks[i].getID() << "\tType: " << trucks[i].getType() << "\tFeeder: " << trucks[i].getFeeder() << "\tAxle: " << trucks[i].getAxle() << std::endl;
}