2013-10-06 47 views
0

我正在通过for循环读取一行5个双行的文件,并将它们存储到一个结构向量中,有时行数小于5个双精度。该文件看起来像测试行尾和空格

111.111 222.222 333.333 444.444 555.555

666.666

777.777(空格)888.888 999.999

struct temp_struct{ 
    double d1,d2,d3,d4,d5 
}; 
vector<temp_struct> data; 
for(int i=0;i<3;i++) 
    File>>data.at(i).d1>>data.at(i).d2>>data.at(i).d3>>data.at(i).d4>>data.at(i).d5; 

有没有办法666.666和插图中后,测试空的空间777.777和888.888。

因为现在我正在读它的方式,在666.666之后,它会转到文件的下一行并读取777.777和888.888 999.999,以便结构看起来像 data.at(1).d1 = 666.666 data.at(1).D2 = 777.777 data.at(1).d3 = 888.888和data.at(1).d4 = 999.999其中我宁愿有

data.at(1).d1=666.666, break because of end of line 
data.at(2).d1=777.777, data.at(2).d2=0, data.at(3).d3=888.8888 

我在VS2010 C++编程

回答

1

解析基于行的文本的常用方法是将std::getline()std::istringstream组合使用,例如:

for (std::string line; std::getline(in, line);) { 
    std::istringstream lin(line); 
    // parse the line using `line` 
} 

虽然还有其他的方法。例如,可以设置流不考虑换行符空白:这样,当遇到换行符时尝试读取数字,尝试读取值将失败!改变被认为是空白的方法是安装定制版本为std::ctype<char>的定制std::locale对象。