C++ 从文件读取到类对象数组以打印 25 行
C++ Reading from file into class object array to print 25 lines
我正在为我的 c++ 课尝试这个作业,我已经工作了几个小时,没有任何进展。我已经对我的问题进行了大量搜索,但没有任何效果。我来这里希望解决我的问题。
我有一个名为"hw2data.txt"的文件,其中包含 25 行信息,我现在试图简单地将其输出到控制台,但我的家庭作业说我需要使用包含 25 个对象的 Student(我的类名)数组来执行此操作在 main 函数中,程序从数据文件中读取并调用 class 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);
}
主.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;
}
我已经尝试了多种方法来使其工作,我遇到的主要错误是 "二进制'>>':未找到采用类型为'重载函数'的右操作数的运算符(或没有可接受的转换)" 请帮忙
使用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
好的,所以要将文件的内容输出到屏幕,您可以执行以下操作:
#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
,将文件中的一行文本获取到类型为std::string
的变量line
中。
在您的示例中,当您获得行时,您需要适当地解析它以获取所有值。您可以使用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::array, std::string, std::istringstream
- 动态分配的聊天数组打印缺失的数据和空
- 对象数组打印空白字符串
- 数组打印"random"值时出现问题
- 数组打印出垃圾值
- 数组打印奇怪的字符,例如 ∟ @
- 测量我的随机数数组打印的时间始终显示为 0 秒
- 数组打印出错误的数字
- 从对象数组打印字符串对象
- 您好,如何防止此函数使用质数数组打印 1
- 如何从主内部的数组打印总计
- 如何将数组打印为矢量形式
- 有人能给我一些关于在C++中使用数组打印出丰富、完美和不足的数字的提示吗
- 为什么我的C++数组打印相同的值
- 如何阻止我的数组打印地址
- 将值输入到结构数组 + 打印输出
- C++11 为什么 cout 从布尔数组打印大整数
- 从字符串数组打印其中一个字符串时出现空指针赋值错误
- 将无符号字符数组打印为十六进制
- 缩短的数组打印错误的结果
- C++中的字符串数组:打印额外的字符