2016-07-25 168 views
-7

我有一个关于我的代码的问题。我想从文本文件中获取信息并将该信息分配给类对象。我将在稍后使用来自对象的信息编写程序。从文本文件读取类对象(C++)

我的文本文件看起来像这样:

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

,其中第一列表示编号,类型,处理时间1,处理时间2

这是我的代码:

#include <iostream> 
    #include <string> 
    #include <fstream> 


using namespace std; 

class trucks { 
private: 
    int ID; 
    string Type; 
    double feeder_pt; 
    double axle_pt; 

    public: 
    void getID (int); 
    void getType (string); 
    void getfeeder (double); 
    void getaxle (double); 

}; 

void trucks::getID(int ID) 
{} 

void trucks::getType (string Type) 
    {} 

void trucks::getfeeder (double feeder_pt) 
{} 

void trucks::getaxle (double axle_pt) 
    {} 

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

int i=0; 

int ID; 

string Type; 

double feeder_pt; 

double axle_pt; 

for(int i=0; i<5; i++) 
    { 

    trucks truck[i]; 
    truck[i].getID(ID); 
    truck[i].getType(Type); 
    truck[i].getfeeder(feeder_pt); 
    truck[i].getaxle(axle_pt); 
    myfile>>ID>>feeder_pt>>axle_pt; 

    } 
// to test only 

cout<< ID << endl; 
cout<< axle_pt << endl; 
cout<< Type << endl; 
cout<< axle_pt << endl; 
} 

输出为我提供了文本文件(984763)中的第一个元素,剩下的就没有了。似乎该文件正在打开,但我的代码有问题。请帮忙吗?

谢谢

+2

您认为'truck [i] .getID(ID); truck [i] .getType(Type); truck [i] .getfeeder(feeder_pt); 卡车[i] .getaxle(axle_pt);'做什么? – NathanOliver

+1

这是错误的'卡车卡车[i];'因为它每次都声明一个新的容器,你如何期待“获取”值,你的函数只是空的,什么都不做? –

+1

这里有太多的问题。这个问题不能挽救。几乎所有可能在这里出错的事情都会发生。 –

回答

0

在编写代码时,其重要的是了解你正在写和为什么。 但在这里,让我给你举个例子:

删除的每个的#include之前的额外的标签,用于prettyness

使用命名空间std,没有必要删除。

删除private :,类成员默认是私有的。

固定类成员套管,使他们相互一致。

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

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

只声明可变卡车一次。

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

将i ++更改为++ i,它稍好一点。 将id,type,feeder_pt和axle_pt变量声明移至循环内部。在“文件MyFile >> ...” 添加型阅读它,以及

删除重复的“COUT < < axle_pt” 新增清点< < 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; 
}