2012-04-08 57 views
0

我有一幫由換行分隔的數字的文本文件,如: 123.25 95.12 114.12等等的fstream的函數getline()的作品一點點......然後突破

的問題是,當我的程序讀取它時,它只會將數字複製到數組中,直到第二個數字,然後用零填充其餘的元素。我試過使用分隔符和忽略語句,但沒有任何工作。這是代碼。

編輯(這裏的整個程序:)

#include <iostream> 
#include <string.h> 
#include <iomanip> 
#include <fstream> 

using namespace std; 


struct utilityInfo 
{ 
    char utility[20]; 
    double monthlyExpenses[12]; 
}; 

int main(){ 

utilityInfo Utility[3]; 

char charray[100]; 

fstream inFile; 
inFile.open("expenses.txt"); 
inFile.getline(charray, 7); 
cout<<charray<<endl; 
if(inFile.fail()) cout<<"it didnt work"; 

for(int i=0; i<12; i++) 
{ 
    inFile.getline(charray,20); 
    Utility[0].monthlyExpenses[i]=atof(charray); 
} 

for(int z=0; z<12; z++) 
{ 
cout<<Utility[0].monthlyExpenses[z]<<endl; 
} 

inFile.close(); 


return 0; 
} 

下面是該文本文件的樣子:

207.14 
177.34 
150.55 
104.22 
86.36 
53.97 
52.55 
58.77 
64.66 
120.32 
153.45 
170.90 

而這裏的輸出是什麼樣子:

207.14 
177.34 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
+0

文件內容是什麼樣的? – josephthomas 2012-04-08 17:26:42

+0

您可能會檢查失敗並在'for(i)'循環中打印每個值。 – 2012-04-08 17:28:04

+0

你也可以粘貼輸出嗎? – vaisakh 2012-04-08 17:29:46

回答

1

你在你的文件中的第一個條目,「207.14」實際上是「207.14」 - (有一個空間)。你讀了7個字符,但在那裏留下「」,這意味着istream :: getline在inFile上設置了失敗位,這意味着你的連續getlines失敗。

要解決此問題,要麼足夠閱讀以達到換行符,請在第一個getline之後移除空格和/或清除inFiles failbit。

您還應該在您的for循環中添加一個檢查,以處理任何可能因失敗/錯誤/ eof位發生的錯誤。