사용자에게 작업이 진행중임을 알리는 간단한 로딩 인디케이터와 프로그레스 바 만들어보기
로딩 인디케이터
#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;
}
'프로그래밍 > C++' 카테고리의 다른 글
C++ ] <random> 헤더 사용 난수 생성 (0) | 2024.12.03 |
---|---|
C++ ] 가변 인자 템플릿(Variadic Templates) 활용 (0) | 2024.09.02 |
C++ ] 문자열 탐색 및 조작 함수, find() 외 (0) | 2024.06.11 |
C++ ] std::condition_variable 사용법 (0) | 2024.05.12 |
C++ ] std::unique_lock과 std::lock_guard의 차이 (0) | 2024.05.04 |