我正在用c++编写一个控制台应用程序,我需要使用ASCII字符来制作类似于"loading.gif“的东西。
以下是我应该使用的字符列表:
这些符号将通过循环加载动画。
但是,当我编写输出时,它变成了如下所示:
输出行1: -输出行2: \输出线3: \输出线4: /输出行5:E 221
我需要这样做:
输出第1行:--这将一直被替换
它永远不应该进入第二行。
我如何在C++中做到这一点?有什么替代功能吗?
发布于 2011-12-13 08:33:59
您可以使用backspace字符('\b')返回并覆盖控制台上的字符。您还需要在每次更改后刷新输出,否则输出可能停留在缓冲区中而不会出现在控制台上。
下面是一个简单的例子:
#include <iostream>
#include <unistd.h> // for sleep()
int main()
{
std::cout << '-' << std::flush;
for (;;) {
sleep(1);
std::cout << "\b\\" << std::flush;
sleep(1);
std::cout << "\b|" << std::flush;
sleep(1);
std::cout << "\b/" << std::flush;
sleep(1);
std::cout << "\b-" << std::flush;
}
}发布于 2011-12-13 09:39:54
Microsoft Windows版本。
#include <iostream>
#include <windows.h> // for sleep()
int main()
{
std::cout << '-' << std::flush;
for (;;) {
Sleep(10);
std::cout << "\b\\" << std::flush;
Sleep(10);
std::cout << "\b|" << std::flush;
Sleep(10);
std::cout << "\b/" << std::flush;
Sleep(10);
std::cout << "\b-" << std::flush;
}
return 0;
}发布于 2015-01-13 14:59:22
Mike的逻辑使用了,但看上去很逼真。
#include <iostream>
#include <unistd.h> // for sleep()
int main()
{
std::cout << "Loading Please Wait";
while (true)
{
sleep(1);
std::cout << "." << std::flush;
sleep(1);
std::cout << "." << std::flush;
sleep(1);
std::cout << "." << std::flush;
sleep(1);
std::cout << "\b\b\b \b\b\b" << std::flush;
}
}https://stackoverflow.com/questions/8486181
复制相似问题