如何在用c++编写的控制台应用程序中制作加载动画
How to make a loading animation in Console Application written in C++?
我正在用c++编写控制台应用程序,我需要通过使用ASCII字符来制作类似"loading.gif"的东西。
下面是我应该使用的字符列表:
- ,
- |
- /
- ,
这些符号将通过循环生成加载动画。
然而,当我写输出时,它变得像:
输出行1:——输出行2: 输出行3: |输出行4:/输出第5行:——
我需要这样做:
输出行1:[这将一直被替换]
它不应该到第二行。
我如何在c++中做到这一点?是否有一种替代的功能?
可以使用退格字符('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;
}
}
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;
}
使用Mike Seymour的Logic,但具有逼真的外观。
#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 << "bbb bbb" << std::flush;
}
}
#include <iostream>
#include <stdio.h>
#include <windows.h>
int main()
{
for (;;) {
std::cout << "bbbbbbbbbbLoading " << std::flush;
Sleep(100);
std::cout << "bbbbbbbbbbLOading " << std::flush;
Sleep(100);
std::cout << "bbbbbbbbbbLoAding " << std::flush;
Sleep(100);
std::cout << "bbbbbbbbbbLoaDing " << std::flush;
Sleep(100);
std::cout << "bbbbbbbbbbLoadIng " << std::flush;
Sleep(100);
std::cout << "bbbbbbbbbbLoadiNg " << std::flush;
Sleep(100);
std::cout << "bbbbbbbbbbLoadinG " << std::flush;
Sleep(100);
std::cout << "bbbbbbbbbbLoading. " << std::flush;
Sleep(100);
std::cout << "bbbbbbbbbbLoading.." << std::flush;
Sleep(100);
std::cout << "bbbbbbbbbbLoading..." << std::flush;
Sleep(100);
}
}
非常简单,您可以使用退格字符,正如这里所解释的那样,这实际上似乎是您的问题的副本。对于更复杂的东西,它是平台特定的;来设置光标的位置,如果你在Windows上,这可能会有帮助。
和一个跨平台的答案:
#include <iostream>
#include <chrono>
#include <thread>
/* Comment for c++11 solution. */
using namespace std::literals::chrono_literals;
int main(int argc, char** argv)
{
/* Uncomment for c++11 solution. */
// std::chrono::seconds s(1);
std::cout << '-' << std::flush;
for (;;) {
std::this_thread::sleep_for(1s);
std::cout << "b\" << std::flush;
std::this_thread::sleep_for(1s);
std::cout << "b|" << std::flush;
std::this_thread::sleep_for(1s);
std::cout << "b/" << std::flush;
std::this_thread::sleep_for(1s);
std::cout << "b-" << std::flush;
}
return 0;
}
请注意,chrono_literals仅在c++14中可用,您可以使用std::chrono::seconds s(1);
代替,将s
传递给std::thread::sleep_for();
for(i=0; i<100; i++)
{
system("cls");
cout << "Loading: " << i << " % n";
if(i==100)
{
redirect to void or... ?
}
}
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 是否可以在QT GUI应用程序中处理事件时播放加载动画指示器?
- 禁用 Win32 C++中单个应用程序的按钮动画
- 如何在用c++编写的控制台应用程序中制作加载动画
- MFC应用程序:动画图形导致程序不响应