-1

我的问题涉及从文本文件中读取整数,将它们保存到数组中,然后将数组复制到新的 .txt 文件中。

所以有一个文件“ krol.txt

2 4
3 7
3 13
2 4
3 1 

问题是它永远不会保存输入 .txt 文件中的最后一个“1”。我不知道为什么。我认为它与文件中最后一个字符的 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;
}
4

2 回答 2

2

这可以很好地保存所有数字。问题是,它在save.txt.

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

你把最后一行数了两次。这为您提供了两个额外的未初始化 int的 s。这两个ints 可以显示为任何整数。

我看到两个问题。您获取行数的第一个循环应该更像

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

如果最后一行没有 final \n,你可以用比你需要的少一行结束。

并且输出循环可以简化为

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

最后,如果你使用,你应该考虑使用std::vector而不是普通数组。然后你不需要预先分配你的数组,只需一次就可以读取文件。

于 2013-03-11T23:16:38.933 回答
0

该文件中可能有 4 个 '\n' 字符您考虑过吗?

于 2013-03-11T23:15:27.697 回答