3 回答
TA贡献1828条经验 获得超3个赞
重复>>循环读取。
#include <iostream>
#include <fstream>
int main(int argc, char * argv[])
{
std::fstream myfile("D:\\data.txt", std::ios_base::in);
float a;
while (myfile >> a)
{
printf("%f ", a);
}
getchar();
return 0;
}
结果:
45.779999 67.900002 87.000000 34.889999 346.000000 0.980000
如果您确切知道文件中有多少个元素,则可以链接>>运算符:
int main(int argc, char * argv[])
{
std::fstream myfile("D:\\data.txt", std::ios_base::in);
float a, b, c, d, e, f;
myfile >> a >> b >> c >> d >> e >> f;
printf("%f\t%f\t%f\t%f\t%f\t%f\n", a, b, c, d, e, f);
getchar();
return 0;
}
编辑:回应您对主要问题的评论。
您有两个选择。
您可以在一个循环(或两个循环)中运行先前的代码并丢弃定义数量的值-例如,如果需要在点(97,60)处的值,则必须跳过5996(= 60 * 100 + 96 )值并使用最后一个。如果您只对指定的值感兴趣,这将起作用。
您可以将数据加载到数组中-正如Jerry Coffin提出的那样。他已经给你很好的上课了,这将解决问题。或者,您可以使用简单的数组来存储数据。
编辑:如何跳过文件中的值
要选择第1234个值,请使用以下代码:
int skipped = 1233;
for (int i = 0; i < skipped; i++)
{
float tmp;
myfile >> tmp;
}
myfile >> value;
TA贡献1869条经验 获得超4个赞
这可能取决于,特别是取决于您的文件在每行上是否具有相同数量的项目。如果可以,那么您可能想要某种2D矩阵类,通常是这样的:
class array2D {
std::vector<double> data;
size_t columns;
public:
array2D(size_t x, size_t y) : columns(x), data(x*y) {}
double &operator(size_t x, size_t y) {
return data[y*columns+x];
}
};
请注意,在撰写本文时,它假设您已经知道预先需要的尺寸。可以避免这种情况,但是代码变得更大,更复杂。
无论如何,要读取数字并保持原始结构,通常需要一次将一行读入字符串,然后使用stringstream从该行读取数字。这使您可以将每行中的数据存储到数组中的单独行中。
如果您不提前知道大小,或者(尤其是)不同行可能不都包含相同数量的数字:
11 12 13
23 34 56 78
您可能要使用一个std::vector<std::vector<double> >代替。这确实增加了一些开销,但是如果不同的行可能具有不同的大小,则这是完成此工作的简便方法。
std::vector<std::vector<double> > numbers;
std::string temp;
while (std::getline(infile, temp)) {
std::istringstream buffer(temp);
std::vector<double> line((std::istream_iterator<double>(buffer)),
std::istream_iterator<double>());
numbers.push_back(line);
}
...或者,使用现代(C ++ 11)编译器,您可以在line的初始化中使用方括号:
std::vector<double> line{std::istream_iterator<double>(buffer),
std::istream_iterator<double>()};
TA贡献1811条经验 获得超4个赞
您可以像其他人一样单独读写。但是,如果您要写到同一本书中,可以尝试以下操作:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
double data[size of your data];
std::ifstream input("file.txt");
for (int i = 0; i < size of your data; i++) {
input >> data[i];
std::cout<< data[i]<<std::endl;
}
}
- 3 回答
- 0 关注
- 1102 浏览
添加回答
举报