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);
}

因此,如您所见,这应该在 Primes.txt 中附加一个素数列表,从素数 1234547 开始。

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

一种简单的方法:继续读取并分配,直到读取整个文件。

例如,

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

我的建议是您使用二进制格式写入文本文件(使用wbin C)。在这种情况下,您将知道最后一个数字占用了多少字节,并且您将能够使用seekgtellg获取它。如果您使用纯文本格式,则必须从最后一个字符一个字符地读取,这更容易出错并且速度也较慢。

于 2013-02-06T14:57:58.943 回答