c++ - 从不同功能的文件中读取
问题描述
我试图从另一个函数中读取同一个文件,但它不起作用。我想问题是我正在尝试读取,ifstream &input
但我不知道实现它的另一种方法
#include <iostream>
#include <fstream>
using namespace std;
class Student{
public:
char name[40]; // i cant use string
int age;
void Input(ifstream &input)
{
input.getline(name, 40);
input >> age;
}
};
void Read(Student *students, int &numberOfStudents)
{
ifstream input("test.txt");
input >> numberOfStudents;
students = new Student[numberOfStudents];
for (int i = 0; i < numberOfStudents; ++i)
students[i].Input(input);
input.close();
}
int main()
{
int size = 0;
Student *students = NULL;
Read(students, size);
for (int i = 0; i < size; ++i)
cout << students[i].name << endl << students[i].age << endl;
return 0;
}
我做了我的输入文件
3
1
2
3
4
5
6
(如果程序正常工作,我应该得到 1 - name age - 2 等)但我得到的是分别没有年龄 = 1 2 3 的名字
解决方案
该程序不起作用,因为您定义了:
void Read(Student *students, int &numberOfStudents)
接着
int size = 0;
Student *students = NULL;
Read(students, size);
指针是按值students
传递的,因此不能更改函数外部的内存地址。Read()
要解决此问题,只需通过引用传递指针:
void Read(Student *& students, int &numberOfStudents)
'\n'
最后,正如我评论的那样,您需要在使用>>
运算符提取数据时在文件中考虑空格,例如行尾:
void Input(ifstream &input)
{
input.getline(name, 40);
input >> age;
input.ignore(1);
}
读取文件中的学生人数也是如此。
推荐阅读
- ios - 升级到 React Native 0.63.2 时出现黄框错误
- node.js - 使用 Nodejs Zlib 压缩从 Multer 上传的文件
- java - 有没有办法根据对象字段的唯一值的数量将对象列表拆分为 n 个列表?
- python - 是否有 networkx 函数来计算社区之间的边数?
- r - 绘制r中线性回归的限制三次样条图
- .net - “但不包含”的正则表达式
- jquery - 如何在 jQuery Timepicker 中修改 startTime?
- angular - Angular 使用带有 createElement 的选择器
- c++ - 在具有其他整数成员变量的类中将 2D char 数组声明为 c++ 中的大小
- lua - 尝试在 roblox studio 中使用“leaderstats”索引 nil