gpt4 book ai didi

c++ - 可以将变化的数字输出到终端和文件的代码

转载 作者:行者123 更新时间:2023-11-30 02:43:32 24 4
gpt4 key购买 nike

我有一个 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 不会删除字符,但会输出一些符号(谷歌搜索告诉我这并不奇怪)。

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

我在 Windows 7 上使用 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;
}

}

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

关于c++ - 可以将变化的数字输出到终端和文件的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26056362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com