-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()){
...
}

最後の行を2回カウントします。これにより、2つの追加の初期化され intていないが得られます。これらの2つintは、任意の整数として表示できます。

2つの問題があります。行数を取得するための最初のループは、次のようになります。

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

最後の行にfinalがない場合は、\n必要な行より1行少なくなる可能性があります。

そして、出力ループは次のように簡略化できます。

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

そして最後に、std::vectorを使用する場合は、プレーン配列の代わりに使用することを検討する必要があります。そうすれば、アレイを事前に割り当てる必要がなく、1回のパスでファイルを読み取ることができます。

于 2013-03-11T23:16:38.933 に答える
0

そのファイルには4つの'\n'文字が含まれている可能性があります。

于 2013-03-11T23:15:27.697 に答える