可以向终端和文件输出更改编号的代码

Code that can output changing number to both terminal and file

本文关键字:编号 代码 输出 终端 文件 可以向      更新时间:2023-10-16

我有一个c++程序,它将不断变化的数字写入屏幕,类似于以下片段:

    stringstream ss, ssd; ss << 0; int decs=0; ssd << decs;
    cout << "Number ";
    for(int i=1;i<=1000;i++) {
        cout << ss.str() << "   Decades: " << decs; cout.flush();
        int l=ss.str().length()+12+ssd.str().length(); 
        for(int j=0;j<l;j++) cout << "b";
        this_thread::sleep_for (chrono::milliseconds(100));
        ss.str(""); ss << i;
        if(i%10==0) {
            decs++; ssd.str(""); ssd << decs;
        }
    }

这很好,但有时(并不总是)我想将输出发送到文件而不是终端,例如使用./prog > out.txt。这里的退格字符b并没有删除字符,而是输出一些符号(谷歌搜索告诉我这并不奇怪)。

一种选择是,例如,在打印到文件时,仅在计算结束时输出数据。但这将需要不同的终端/文件代码,例如使用输入参数进行切换。有没有一种方法可以做到这一点,而不需要为终端/文件输出单独的代码?

我在Windows7上使用cygwin。

尝试每次写入整个字符串,只写入'r'而不写入'n'

stringstream ss, ssd; ss << 0; int decs=0; ssd << decs;
for(int i=1;i<=1000;i++) {
    cout << "Number " << ss.str() << "   Decades: " << decs; cout.flush();
    //int l=ss.str().length()+12+ssd.str().length(); 
    //for(int j=0;j<l;j++) cout << "b";
    cout << 'r';
    this_thread::sleep_for (chrono::milliseconds(100));
    ss.str(""); ss << i;
    if(i%10==0) {
        decs++; ssd.str(""); ssd << decs;
    }
}

在这种情况下,您将在文件中获得完整的输出。

一种可能的解决方法是使用std::cerr作为中间结果('b'也是如此),

CCD_ 7作为最终结果。