例如输出为 a = 20 我想将数字“20”更改为另一个数字并将结果写入第一个输出的相同位置,而不是新行(“a”的最早数量不需要最后一个结果很重要) 我尽量避免这样的事情:
输出:
a=20
a=21
a=70
.
.
.
答案 0 :(得分:6)
你试过这个:
printf("\ra=%d",a);
// \r=carriage return, returns the cursor to the beginning of current line
答案 1 :(得分:4)
正式地,通用解决方案需要ncurses
之类的东西。
实际上,如果您要寻找的就是:
a = xxx
xxx
是一个不断发展的值,您可以输出该行
没有'\n'
(或std::flush
代替std::endl
);更新,
只输出足够\b
个字符才能回到开头
数。类似的东西:
std::cout << "label = 000" << std::flush;
while ( ... ) {
// ...
if ( timeToUpdate ) {
std::cout << "\b\b\b" << std::setw(3) << number << std::flush;
}
}
这假设固定宽度格式(在我的例子中,没有值 大于999)。对于可变宽度,您可以先格式化为 std :: ostringstream,以确定退格的数量 你下次需要输出。我会使用特殊的计数器类型 为此:
class DisplayedCounter
{
int myBackslashCount;
int myCurrentValue;
public:
DisplayedCounter()
: myBackslashCount(0)
, myCurrentValue(0)
{
}
// Functions to evolve the current value...
// Could be no more than an operator=( int )
friend std::ostream& operator<<(
std::ostream& dest,
DisplayedCounter const& source )
{
dest << std::string( myBackslashCount, '\b' );
std::ostringstream tmp;
tmp << myCurrentValue;
myBackslashCount = tmp.str().size();
dest << tmp.str() << std::flush();
return dest;
}
};
答案 2 :(得分:2)
我最后一次这样做(当恐龙在地球上漫游而牛仔布很酷的时候回来),我们使用了Curses。
答案 3 :(得分:1)
您可以存储所需的所有输出,并在每次更改值时重新绘制整个控制台窗口。不知道在Linux上,但在Windows上你可以通过以下方式清除控制台:
system("cls");