从文件读取到不同的类对象
Reading from file to different class objects
我是C++编码的初学者,我有一个关于将文件中的行读取到特定类对象(其中一个是数组)的问题。
我的类对象:
const int SIZE_OF = 5;
class Student
{
public:
Student();
Student(const Student &);
Student(string, int, int, int, int, int);
friend std::istream& operator >> (std::istream& in, Student& S);
void display();
private:
string lastName;
int grades[SIZE_OF];
};
定义函数的CPP文件:
Student::Student()
{
int i;
string lastName = "default";
for (i = 0; i < 5; i++)
{
grades[i] = 0;
}
}
Student::Student(const Student & S)
{
int i;
lastName = S.lastName;
for (i = 0; i < 5; i++)
{
grades[i] = S.grades[i];
}
}
Student::Student(string S, int a, int b, int c, int d, int e)
{
lastName = S;
grades[0] = a;
grades[1] = b;
grades[2] = c;
grades[3] = d;
grades[4] = e;
}
std::istream& operator >> (std::istream& in, Student& S)
{
std::string line;
std::getline(in, line);
in >> S.lastName >> S.grades[0] >> S.grades[1] >> S.grades[2] >> S.grades[3] >> S.grades[4];
getline(in, S.lastName);
return in;
}
void Student::display()
{
int i;
int sum = 0;
double average;
cout << "Last Name: " << lastName << endl;
cout << "Grades: " << endl;
for (i = 0; i < 5; i++)
{
cout << grades[i] << endl;
}
for (i = 0; i < 5; i++)
{
sum = sum + grades[i];
}
average = sum / 5;
cout << "Average: " << average;
}
我需要做的是从文件中读取并将名称保存在Student
类的lastName
对象下。然后我需要在数组对象中保存每个等级。然后,我需要为下一个名称创建一个新的Student
类对象,并对4个名称重复该过程。我正在读取的文件:
George
75,85,95,100,44
Peter
100,100,100,100,100
Frank
44,55,66,77,88
Alfred
99,88,77,66,55
您的以下函数似乎是错误的:
std::istream& operator >> (std::istream& in, Student& S)
{
std::string line;
std::getline(in, line);
in >> S.lastName >> S.grades[0] >> S.grades[1] >> S.grades[2] >> S.grades[3] >> S.grades[4];
getline(in, S.lastName);
return in;
}
你读了两遍lastName,你不会忽略","字符。。。试试这样的东西:
std::istream& operator >> (std::istream& in, Student& S)
{
char dummy;
in >> S.lastName >> S.grades[0]
>> dummy >> S.grades[1]
>> dummy >> S.grades[2]
>> dummy >> S.grades[3]
>> dummy >> S.grades[4];
return in;
}
更新:如果您考虑lastName中的空格,则必须将第一行更改为使用std::getline,如下所示:
std::istream& operator >> (std::istream& in, Student& S)
{
char dummy;
std::getline(in, S.lastName)
in >> S.grades[0]
>> dummy >> S.grades[1]
>> dummy >> S.grades[2]
>> dummy >> S.grades[3]
>> dummy >> S.grades[4];
in.ignore(); // remove last 'n'
return in;
}
然后:
int main()
{
Student s;
std::vector<Student> all;
while (cin>>s)
all.push_back(s);
}
和足够的更新!
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在h文件中包含.o对象文件
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 从对象文件(.o)在macos上制作归档文件(.a文件)
- 检测 COFF 对象文件中C++内联符号
- 特定对象文件的单线程生成
- 使用对象文件读取三角形数据网格
- 链接时,不同静态库中的同一对象文件
- 防止临时对象文件访问 MSVC 中的磁盘
- 对在不同二进制文件中创建的对象文件的依赖关系
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 是否有正确的方法对生成文件中的对象文件使用模板命令?(C++)
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 使用 make 将对象文件放在特定目录中
- 如何从 3d 对象文件中获取 3d 坐标
- 为什么我的生成文件没有生成对象文件?
- 如何在OSX上正确创建C++对象文件(.o)
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- 使用nvcc(CUDA-RINSIDE)正确链接对象文件
- 链接节点本机模块中的提升库,对象文件需要替代库版本