C ++从文件读入类对象数组以打印25行

时间:2017-03-06 02:28:45

标签: c++ arrays class object

我正在尝试为我的c ++课程完成这项功课,而我现在已经开始工作了几个小时而且没有取得任何进展。我已经对我的问题进行了大量搜索,但没有任何方法可行。我来这里是为了解决我的问题。

我有一个名为" hw2data.txt"有25行信息,我现在试着简单地将它输出到控制台,但我的作业说我需要使用一个包含25个对象的Student(我的类名)数组来完成它在主函数中,程序从数据文件中读取并调用类Student的成员函数来设置成员变量并输出结果。

我希望能够在进入函数之前完全输出文件中的文本并将其添加到结果中。

TXT文件

10001 Alice Brown       89 85 92 99 90 
10004 Bob Bush          85 76 83 79 83 
10010 Carl Capra        65 57 73 68 76 
10012 David Lieberman   76 68 79 81 58 
10034 John Menchin      100 89 95 93 88 
10056 George Smith      86 78 90 80 95  
10062 Elaine Sanders    85 79 90 80 95  
10078 Jack Cunningham   72 78 82 97 84 
10090 Susie Brown       68 85 80 84 83  
10099 Marvella Garcia   86 92 88 97 98  
10120 Tony Peterson     85 84 83 90 76 
10129 John Jones        75 75 80 84 80 
10131 Mary Evans        60 72 89 86 65  
10146 Nancy Drew        78 80 75 90 85  
10152 Lola Zapeta       89 81 98 89 97  
10155 Duckey Donald     82 60 73 78 55 
10163 Goof Goofy        89 78 75 89 56 
10168 Brave Balto       100 98 93 89 92 
10178 Snow Smitn        93 76 54 83 80 
10184 Alice Wonderful   86 79 87 78 67 
10192 Samina Akthar     85 62 78 45 60 
10207 Simba Green       50 45 35 60 20 
10211 Donald Egger      76 80 83 68 81 
10216 Brown Deer        86 87 89 79 75 
10245 Johny Jackson     96 85 91 83 79 

学生班级档案

#include <iostream>
#include <fstream>
#include <string>
#include "Student.h"
using namespace std;

void Student::setID(int tID)
{
    ID = tID;
}

void Student::setFName(string f)
{
    firstName = f;
}

void Student::setLName(string l)
{
    lastName = l;
}

void Student::setScores()
{

}

int Student::getID()
{
    return ID;
}

string Student::getFName()
{
    return firstName;
}

string Student::getLName()
{
    return lastName;
}

int Student::getWeightedTotal()
{
    return 0;
}

int Student::getGrade()
{
    return 0;
}

void Student::printStudent()
{
}

Student::Student()
{
    ID = 0;
    firstName = "";
    lastName = "";

}

Student::Student(int tID, string f, string l)
{
    setID(tID);
    setFName(f);
    setLName(l);


}

Main.cpp文件

#include <iostream>
#include <fstream>
#include <string>
#include "Student.h"
using namespace std;

int main() {

    Student students;
    Student sa[25];
    ifstream inFile;
    inFile.open("hw2data.txt");






    system("pause");
    return 0;
}

我已经尝试了多种方法让这个工作,我得到的主要错误是 &#34;二进制&#39;&gt;&gt;&#39;:找不到哪个运算符采用类型&#39; overloaded-function&#39;的右手操作数。 (或者没有可接受的转换)&#34; 请帮忙

2 个答案:

答案 0 :(得分:0)

好的,所以要将文件的内容输出到屏幕,你可以这样做:

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

int main() {
    std::ifstream inFile;
    inFile.open("hw2data.txt");

    for (std::string line; std::getline(inFile, line); ) {
        std::cout << line << '\n';
    }

    return 0;
}

此处我们在循环中调用std::getline,以便将文件中的一行文本转换为line类型的变量std::string

在您的示例中,当您获得行时,您需要适当地解析它以获取所有值。您可以使用std::istringstream,因此需要在适当的位置添加以下代码:

#include <array>
#include <sstream>

std::istringstream stream(line);
int id;
std::array<int, 5> scores;
std::string first_name, last_name;

stream >> id >> first_name >> last_name >> scores[0] >> scores[1] >> scores[2] >> scores[3] >> scores[4];

您还必须考虑到您的文件包含2行应该被跳过。

拥有所有数据后,您可以轻松构建Student个对象。

了解std::arraystd::stringstd::istringstream

答案 1 :(得分:0)

正如您在评论中提到的那样,使用inFile >> students.getID;将不会执行任何操作。请查看getID函数:int Student::getID()。它除了返回一个整数之外什么都不做(更不用说有任何重载的运算符,稍后你会了解它)。

如果要将信息存储到Student对象中,您有两个选项,使用构造函数或使用set函数。在尝试填充整个数组之前,尝试将1名学生读入单个Student对象可能是一种很好的做法。

以下是一个可以帮助您的示例:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class Cat 
{
    int weight;
    string favoriteFoods [3];
public:
    void set_weight (int);
    void set_favoriteFoods (string);
};

void Cat::set_weight (int w) 
{
    weight = w;
}

void Cat::set_favoriteFoods (string ff[3]) 
{
    favoriteFoods = ff;
}

int main () 
{
    int catWeight;
    string catFavoriteFoods [3];

    ifstream infile;
    infile.open ("kittyInfo.txt");

    if(infile.is_open())
    {
        infile >> catWeight;
        infile >> catFavoriteFoods[0];
        infile >> catFavoriteFoods[1];
        infile >> catFavoriteFoods[2];
    }

    Cat kitty;
    kitty.set_weight (catWeight);
    kitty.set_favoriteFood(catFavoriteFoods);

    infile.close();

    return 0;
}

假设kittyInfo.txt看起来像这样:

15     fish    milk    fear