设计一个简单的进度条,在最后立即从0->100%到C++
Design of a simple progress bar to cout goes from 0->100% instantly at the end in C++
我想通过打印一个"X"字符来制作一个非常基本的进度指示器,以便在循环再进行 10% 时打印一个 'X' 字符。我正在尝试按照下面粘贴的代码所示执行此操作,但它似乎不起作用 - 实际上似乎应该这样做。
它应该在整个循环中显示稳定的进度,但相反,在循环结束后,我会立即获得所有 X。这并不是因为循环完成得太快,以至于我无法感知。为了验证这一点,您可以在"TOTAL"中添加一个额外的"F"以大大增加循环的持续时间,您会发现这不仅仅是感知问题。
知道是什么原因造成的吗?
#include <iostream>
#define TOTAL 0xFFFFFFF
using namespace std;
int main(void) {
//Make a counter for counting loops
double counter = 0;
// Set it to trigger after each 10% of progress
double counterMax = TOTAL / 10;
cout << "Starting now..." << endl;
for (double i = 0; i < TOTAL; i++) {
// Do something... anything
i++;
i--;
// Increment the counter
counter++;
// Print an X when the counter exceeds the 10%
// trigger point, and then reset the counter.
if (counter > counterMax) {
cout << 'X';
counter = 0;
}
}
cout << endl << "Done!";
return 0;
}
系统输入/输出调用通常是缓慢的操作。 为了提高程序的效率,输入和输出流经常被缓冲,以减少对操作系统的调用次数。
当程序需要"非缓冲"输出时,一种解决方案是使用缓冲输出函数,并简单地"刷新"输出以确保操作系统处理已在任何缓冲区中排队的任何输出。
当输出缓冲区被填满或流关闭时,它会自动刷新。 标准输出也会通过某些序列自动刷新,例如 endl
。 但是,您可以随时通过调用cout.flush()
或使用flush
操纵器触发标准输出的刷新,例如:
cout << 'X' << flush;
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- lower_bound()返回最后一个元素
- 从控制台中删除最后打印的元素
- 获取向量C++中第一个值和最后一个值的和
- EASTL矢量<向量<int>>连续的
- 获取用C/C++打印的最后一个字符串
- 读取最后一行代码算法 - c++ 时出现问题
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 为什么我的最后一个 ELSE 条件无法正确执行
- 如何在最后一步使用CryptDecrypt解决NTE_BAD_DATA
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 仅显示链表的最后一个元素
- 这段代码的最后一行在做什么?
- 删除列表 c++ 中的最后 3 个元素
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 测试迭代器是否位于列表中的最后一个
- push_back通过自行创建的对象获取最后一个元素的向量
- 斐波那契数列部分和的最后一位数字