我的问题是如何正确使用函数infile.open()
。
我有一个课程,其中包括以下公共属性:
class myclass {
public:
int rows
int columns
const char* array_file
}
所有值都在运行时给出。
当我调用使用我所拥有的类的成员的函数时(pt是指向该类成员的指针)
#include <vector>
#include <fstream>
#include <iostream>
typedef std::vector< std::vector<int> > Matrixint;
void function(myclass* pt) {
Matrixint array_name(pt->rows, std::vector<int>(pt->columns));
std::ifstream infile;
infile.open("%s", pt->array_file); // my problem: is this correct?
for (int a = 0; a < pt->rows; a++) {
for (int b = 0; b < pt->columns; b++) {
infile >> array_name[a][b] ;
}
}
infile.close();
}
这种打开/读取文件的方式是否正确?
文件中的数据格式为this question(请注意:文件中只有数组,没有其他数据)
答案 0 :(得分:3)
infile.open
将第一个参数作为文件名:
void open ( const char * filename, ios_base::openmode mode = ios_base::in );
(source)
我不知道你的文件名是什么,但也许是这样的(只是基于变量类型的猜测)可以做到:
infile.open(pt->array_file);
当然,您必须确保在调用该函数时传入的文件名是正确的。
答案 1 :(得分:2)
假设我修复你的问题代码的心理能力是正确的,我会这样写:
struct mine {
int rows
int columns
std::string array_file
}
void function(const mine& m) {
Matrixint array_name(pt->rows, std::vector<int>(pt->columns));
std::ifstream infile(m.array_file.c_str());
for (int a = 0; a < ls->rows && infile.good(); ++a) {
for (int b = 0; b < ls->columns && infile.good(); ++b) {
infile >> array_name[a][b] ;
}
}
if(!infile)
throw "Uh oh!"; // assume real error handling here
}
为什么我改变了所有这些东西?
class
,而是数据聚合。我会使用struct
,以免混淆后来需要维护我的代码的人。 (这可能包括我在未来几年,这是一个非常有帮助的强烈动机。)std::string
而不是C风格的字符串。 const
reference? std::ifstream
有一个构造函数,您可以使用它立即打开文件。我很少使用(或看到使用过)open()
成员函数。