2013-03-11 24 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' 字符?