0

fstreamで素数のリストを出力するプログラムをやっています。

私はこれまでのところこれを持っています:

int export_list (int lim = 50)
{
    int x;
    last_in_txt = ????????????; // assigns last number on txt

    ofstream file ("Primes.txt" , ios::app);

    if (file.is_open()) // if it opens correctly
    {
        for (x = last_in_txt ; x < lim ; x++)
        {
            if (check_prime (x)) // returns 1 when x is prime, returns 0 when not
            {
                file<< x << " ";
            }
        }
        cout << "Done!" << endl << pressenter;
        cin.get();
    }
    else
    {
        cout << "Unable to open file" << endl << pressenter;
        cin.get();
    }
    return(0);
}

ご覧のとおり、これにより、素数 1234547 から始まる素数のリストが Primes.txt に追加されます。

Primes.txt は次のようになります。

2 3 5 7 11 13 17 19 23 29 31 37 (...) 1234543 1234547 

私の質問は1234547、変数に (txt の最後の番号である)を割り当てる方法last_in_txtです。

その他の (それほど重要ではない) 質問: 現在行っている方法で数値を保存する必要がありますか、それとも各数値を別の行に保存する必要がありますか?

4

2 に答える 2

2

簡単な方法の1つは、ファイル全体が読み取られるまで読み取りと割り当てを続けることです。

例えば、

int last_in_txt = 0;
{
    ifstream infile("Prime.txt");
    int k;
    while(infile >> k) {
        last_in_txt = k;
    }
}
// Now last_in_txt is assigned properly, and Prime.txt is closed

これは、の数字がスペース文字( )または改行文字( )Prime.txtで区切られていてもうまく機能します。' ''\n'

于 2013-02-06T14:56:59.867 に答える
1

私の提案は、バイナリ形式を使用してテキストファイルに書き込むことです(を使用wbしてC)。この場合、最後の数値が何バイトを占めるかがわかり、それを使用seekgtellgて取得できるようになります。プレーンテキスト形式を使用する場合は、最後から文字ごとに読み取る必要があり、これはエラーが発生しやすく、速度も遅くなります。

于 2013-02-06T14:57:58.943 に答える