프로그래밍/C++
C++ ] CLI Loading indicator와 Progress bar
eteo
2024. 10. 28. 22:22
사용자에게 작업이 진행중임을 알리는 간단한 로딩 인디케이터와 프로그레스 바 만들어보기
로딩 인디케이터
#include <iostream>
#include <thread>
using namespace std;
bool running = true;
void loading_indicator() {
const char* states[] = {" ", ". ", ".. ", "... ", ".... ", "....."};
int index = 0;
while (running) {
cout << "\rLoading" << states[index] << flush;
index = (index + 1) % 6;
this_thread::sleep_for(chrono::milliseconds(500));
}
cout << "\rDone. " << endl;
}
int main() {
thread print_status(loading_indicator);
this_thread::sleep_for(std::chrono::seconds(5));
running = false;
print_status.join();
return 0;
}
프로그레스 바
#include <iostream>
#include <string>
#include <thread>
using namespace std;
class ProgressBar {
private:
int barWidth;
int progress;
char fillChar;
char emptyChar;
public:
ProgressBar() : barWidth(50), progress(0), fillChar('='), emptyChar(' ') {}
void update(float percentage) {
progress = static_cast<int>(percentage / 100 * barWidth);
cout << "\r[";
for (int i = 0; i < barWidth; i++) {
if (i < progress) cout << fillChar;
else cout << emptyChar;
}
cout << "] " << static_cast<int>(percentage) << "% ";
cout.flush();
}
void setWidth(int width) {
barWidth = width;
}
void setChar(char fill, char empty = ' ') {
fillChar = fill;
emptyChar = empty;
}
};
int main() {
ProgressBar bar;
bar.setWidth(30);
bar.setChar('#');
for (int i = 0; i <= 100; ++i) {
bar.update(i);
this_thread::sleep_for(chrono::milliseconds(100));
}
return 0;
}