您好我正在使用c ++并且我使用fgets读取文件,我正在使用while循环和sscanf来推回我的vector double,而我想使用单行执行它,就像ifstream的情况一样但我不想用get line。
%% My stream of data
151 150 149 148 147 146 145 144 143 143 141 139 138 137 135
132 130 130 129 128 127 127 128 129 130 129 128 127 126 127
127 127 127 128 128 128 129 130 130 131 131 132 132 133 133
%% My code
vector<double> vec_TEC1D;
double temp_holder = 0.0;
while(!feof(fileptr))
{
fgets(line, LENGTH_LINE, fileptr);
.....
while(strstr(line, '\n') != NULL){
sscanf(line, "%lf", &temp_holder);
vec_TEC1D.push_back(temp_holder);
}
}
我已经在上面使用2 while循环用于其他目的,因此我想避免这个..
感谢您的帮助! :) 普里亚
答案 0 :(得分:2)
为什么不使用std::ifstream
?
std::ifstream fin(filename);
std::vector<double> vec_TEC1D{ std::istream_iterator<double>{fin},
std::istream_iterator<double>{}};
(改编自this answer)。
答案 1 :(得分:0)
以下是一些可能对您有所帮助的提示:
所以你的代码可能如下:
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
int main(int argc, char* argv[]) {
if(argc < 2)
return -1;
std::ifstream input(argv[1]);
std::vector<double> data;
std::string line;
while(std::getline(input, line)) {
std::stringstream converter(line);
std::copy(std::istream_iterator<double>(converter),
std::istream_iterator<double>(),
std::back_inserter(data));
}
// Do something with the data, like print it...
std::copy(begin(data), end(data), std::ostream_iterator<double>(std::cout, " "));
return 0;
}
有更简洁的方法可以做到这一点,但我建议像处理代码一样处理每行separatley。也许你的文件包含其他行,你想以不同的方式处理它们。