C 中的数据流

data streaming in c++

本文关键字:数据流      更新时间:2023-10-16

我有一个程序,可以每1/10秒生成一个随机整数。这是代码:

int main()
{
    ofstream myfile;

    int max;
    cout << "Max number: ";
    cin >> max;
    for (int i = 0; i < max; ++i)
    {
        myfile.open("test.txt",fstream::app);
        myfile << random_int() << "n";
        myfile.close();
        this_thread::sleep_for(chrono::milliseconds(100));
    }

    return 0;
    }
int random_int()
{
    return rand() % 10;
}

现在的问题是,我需要编写一个程序来计算然后以相同速率输出平均值。如果数字生成器的输出为:

1
2
3
4
5

平均计算器的输出应为

1
1
2
2
3

每1/10秒,程序将输出一个数字。

注意:最大数字可以从0到数百万。通过在时间间隔内添加所有前几个数字来计算平均值不是理想的选择。

我是一名大二学生,也是大学的研究助理。这是我目前遇到的问题的简化版本。任何建议将不胜感激。

更新:感谢FEI Xiang和Oklar的帮助。是的,请记住上一个总和是时间进行计算的唯一方法。但是,由于随机生成器输出文件正在不断变化,并且将新输出附加到旧输出上,因此我不确定如何有效地获取最新数据。

您不需要计算每次添加的所有数字,您只需要将最后一个添加到一个和变量中,然后除以生成的数字。<<<<<<<<<<<<<<

说你有:

1
2
3
4
5

sum变量为15。如果您除以5的数量数量,您将获得3的预期输出。6,您最终要获得4个。

for循环中的i可以用作生成数字量的计数器。伪代码:

sum += randomInt();
avg = sum/i;

编辑:我看到您每次在帖子中的for循环中打开和关闭文件。这可以在循环外完成,这将加快速度。如果我正确理解您,您的任务是生成一个随机数,然后从上一个数字中计算平均值,最后将其附加到文本文件中?如果是这样,您就可以了。

int i_random;
int avg;
int sum = 0;
myfile.open("avg.txt",fstream::app);
for (int i = 1; i < max + 1; ++i)
{
    i_random = random_int();
    sum += i_random;
    avg = sum/i;
    myfile << avg << "n";
    this_thread::sleep_for(chrono::milliseconds(100));
}
myfile.close();

有关其他操作员,请参见http://www.cplusplus.com/doc/tutorial/files/。查看seek的cppreference,并告诉您是否要跳过文件中的位置。