数据的格式为
int int string
例如
1 2 Hello Hi
2 3 How are you?
如何从中获取单个元素?
答案 0 :(得分:3)
如果您要使用fscanf
执行此操作,则需要使用scan set
转换,例如:
int a, b;
char c[256];
fscanf(infile, "%d %d %[^\n]", &a, &b, c);
要扫描文件中的所有行,您可以执行以下操作:
while (3 == fscanf(infile, "%d %d %[^\n]", &a, &b, c))
process(a, b, c);
fscanf
会返回成功转换的项目数,因此3 ==
基本上会说:"只要您成功转换所有三个项目,就处理它们"。
但是,在C ++中,我更喜欢使用iostream,例如:
infile >> a >> b;
std::getline(infile, c);
通常,像这样的文件行代表某种逻辑记录,你可能想要放入struct
,所以你要从那开始:
struct foo {
int a, b;
std::string c;
};
..然后你可以重载operator>>
来读取整个结构:
std::istream &operator>>(std::istream &is, foo &f) {
is >> f.a >> f.b;
std::getline(is, f.c);
return is;
}
从那里,将结构读入(例如)矢量可能看起来像这样:
std::vector<foo> vf;
foo temp;
while (infile >> temp)
vf.push_back(temp);
如果您愿意(我通常这样做),您可以记住vector
有一个带有一对迭代器的构造函数 - 并且std::istream_iterator
可以正常工作,所以你可以做这样的事情:
std::vector<foo> vf {
std::istream_iterator<foo>(infile),
std::istream_iterator<foo>() };
...矢量将从文件中的数据初始化。