2013-10-06 51 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對象。