2013-03-11 55 views
-1

我的問題涉及從文本文件讀取整數,將它們保存到數組,然後將數組複製到新的.txt文件。無法從.txt文件獲取最後一個int

因此,有一個文件「krol.txt

2 4 
3 7 
3 13 
2 4 
3 1 

的問題是,它永遠保存最後的「1」從輸入.txt文件。我不知道爲什麼。我認爲它關於文件中最後一個字符的EOF,但它爲什麼這樣工作?誰能幫我?

這是我的代碼:

#include <iostream> 
#include <fstream> 
#include <cstdlib> 

using namespace std; 

int main() { 
    ofstream outFile; 
    ifstream fin; 
    fin.open("krol.txt"); 
    int l=0; 
    char ch; 

    while (fin.good()) { 
     fin.get(ch); 

     if(ch=='\n') l++; 
    } 
    fin.close(); 

    fin.open("krol.txt"); 
    int temp[l][2]; 
    int savel=l; 
    l=0; 
    int i=0; 

    while (fin >> (temp[l][i])) { 
     i++; 
     if(i==2) { 
       i=0; 
       l++; 
     } 
    } 

    outFile.open("save.txt"); 

    for (int i=0, j=0;j<savel;i++) { 
     if (i==2) { 
      i=0; j++; 
     } 
     outFile << temp[j][i]; 
    } 

    outFile.close(); 
    system("PAUSE"); 
    return 0; 
} 
+0

這*真的*編譯? 'int temp [l] [2];'(這是'''非''constst'' int變量,而不是數字)。 – 2013-03-11 23:56:44

回答

2

這節省了所有的數字就好了。問題是,它在save.txt中存儲了附加數字。

隨着

while (fin.good()){ 
... 
} 

算上最後一行的兩倍。這給你兩個額外的未初始化的int s。這兩個int可以顯示爲任何整數。

我看到兩個問題。你的第一個循環獲得的行數應該更像

while (fin.get(ch)){ 
    if (ch == '\n') 
     l++; 
} 

如果最後一行沒有一個最終\n,你可以用不到你需要一個行結束。

和輸出迴路可以簡化成

for (int j = 0; j < savel; j++){ 
    for (int i = 0; i < 2; i++) 
     outFile << temp[j][i] << ' '; 
} 

最後,如果你使用,你應該考慮使用std::vector,而不是簡單的數組。那麼你不需要預先分配你的數組,並且只需一次就可以讀取文件。

+0

save.txt變得瘋狂並保存'2 4 3 7 3 13 2 4 3 1 2293083 0'。 2最後的數字代表什麼?那是什麼呀。 – 2013-03-11 23:21:18

+1

@FilipBartuzi請參閱最新的答案。 – 2013-03-11 23:46:35

0

可能有4在該文件中你認爲 '\ n' 字符?