이근둥
근둥이의 블로그
이근둥
전체 방문자
910,179
오늘
319
어제
625

공지사항

  • 전체보기 (110)
    • 웹 (9)
    • 언어 & 프레임워크 (53)
      • JavaScript (7)
      • TypeScript (0)
      • Node.js (11)
      • Vue.js (3)
      • React (0)
      • React Native (0)
      • C & C++ (19)
      • Java & JSP (9)
      • Python (4)
    • 컴퓨터 과학 (3)
      • 알고리즘 (0)
      • 자료구조 (3)
    • 기타 (9)
      • Linux (1)
      • Git (2)
      • DialogFlow (4)
    • 일상 (13)
      • 게임 (13)
    • 칼럼 (11)
      • 회고 (2)
      • 나만의 글 (0)
      • 제품 리뷰 (9)
    • __Dev__ (9)
      • Release (9)
반응형

인기 글

  • 웹 푸시 알림(Web Push Notification)
    2022.06.13
    웹 푸시 알림(Web Push Notification)
  • [C/C++] 콘솔게임 프로그래밍 (1) - 프로젝트 생성⋯
    2017.12.19
    [C/C++] 콘솔게임 프로그래밍 (1) - 프로젝트 생성⋯
  • [Node.js] 실시간 채팅 서비스 만들기(5) - 채팅⋯
    2018.05.31
    [Node.js] 실시간 채팅 서비스 만들기(5) - 채팅⋯
  • [C/C++] 콘솔게임 프로그래밍 (2) - 메뉴 선택기능
    2017.12.19
    [C/C++] 콘솔게임 프로그래밍 (2) - 메뉴 선택기능
  • [Tomcat] 아파치 톰캣 서버 포트 변경하기
    2018.08.24
    [Tomcat] 아파치 톰캣 서버 포트 변경하기

태그

  • 성장
  • Java FX
  • java
  • 웹 확장
  • composition-api
  • Up
  • 이클립스
  • 출간
  • 회고
  • 전개 구문
  • Composition API
  • 프로그레시브 웹 앱
  • 사이드 프로젝트
  • vue.js
  • 자바 프로젝트
  • vue
  • 자바
  • AstroWar
  • WWDC
  • spread syntax
  • Deemo
  • WWDC20
  • Vue 3
  • vue3
  • 자기계발
  • vuex
  • ES6
  • pwa
  • javascript
  • vue-next

최근 댓글

  • 말씀해주신 책 사려고 하는데요, 환경 설치부터 자세하게 습⋯
    신기준
  • 늦게 답변드려 죄송합니다. iOS Safari 의 경우 웹⋯
    이근둥
  • 안녕하세요 혹시 전체 방문자는 어떻게 구현하셨나요?
    jj123
  • 안녕하세요. 아래 익명 댓글 작성자인데 암호를 잘못 입력했⋯
    이재원
  • 선생님 잘배우고 있습니다. 저는 LINUX 환경에서 작⋯
    전마머꼬

최근 글

  • Up 개발기 그리고 회고 - 3
    2023.05.31
    Up 개발기 그리고 회고 - 3
  • Up 개발기 그리고 회고 - 2
    2023.05.31
    Up 개발기 그리고 회고 - 2
  • Up 개발기 그리고 회고 - 1
    2023.05.31
    Up 개발기 그리고 회고 - 1
  • 웹 푸시 알림(Web Push Notification)
    2022.06.13
    웹 푸시 알림(Web Push Notification)
  • 스택(Stack)
    2022.05.26
    스택(Stack)

블로그 메뉴

  • 홈
  • 미디어로그
  • 방명록
hELLO · Designed By 정상우.
이근둥

근둥이의 블로그

[C/C++] 콘솔 프로그래스바(ProgressBar) 구현하기
언어 & 프레임워크/C & C++

[C/C++] 콘솔 프로그래스바(ProgressBar) 구현하기

2018. 4. 20. 13:27
반응형

안녕하세요



이번 포스팅에서는 C/C++의 콘솔 환경에서 프로그레스바(진행바)를 구현하는 방법에 대해

알아보도록 하겠습니다






소스코드



1000개의 전체 작업량 중 1개가 완료되었다면 진행률은 0.1%가 됩니다.



현재 진행량/전체 진행량 * 100 = 진행률(%)


100분율 계산법입니다


해당 연산은 코드의 19행에서 진행하고 있습니다.


현재 진행량은 코드상에서 count 변수

전체 진행향은 코드상에서 MAX 변수입니다.




진행률을 계산했으면 해당 진행률을 기준으로 프로그레스바(진행바)를 출력해야합니다.





100(%)/프로그레스바 길이 = 몇 %마다 프로그레스바 1개 출력


만약 프로그레스바의 길이가 20이라고 하면


100/20 = 5


[====================] 100%


위의 모습일겁니다.



길이는 고정되어있음으로 진행률 퍼센트에 따라 = 문자를 출력해줘야 하죠


코드의 13행에서 해당 계산을 진행하고 있습니다.


계산 후 tick 이라는 변수에 저장해두었습니다.



20길이의 프로그레스바는 5% 마다 = 한개를 출력합니다.



10%라고 하면 == 를 출력하겠죠?




17~31행의 while 문은 0~전체 진행량까지 반복하는 반복문입니다.


19행에서 매번 반복마다 진행률(%)을 계산하여


20행에서 프로그레스바 = 문자를 몇개 출력할지 계산한 후


그 아래 21행 for문에서 출력을 합니다.




for문은 0~LEN 까지 반복을 하는데 LEN은 프로그레스바의 길이가 저장되있는 변수이름입니다.


20이라고 가정하면 0~20까지 반복하계되죠


bar_count는 20행에서 현재 %는 몇개의 =문자를 출력할지 저장되어있습니다.







만약 프로그레스바 길이가 20이고 진행률이 7%라고 가정합시다.



1 - 13행처럼 먼저 몇 %마다 =문자를 출력할지 계산

100/20 = 5(%)


tick = 5


2 - bar_count에 현재 퍼센트는 몇개의 =를 출력할지 계산

percent/tick = 갯수


7/5 = 1(나머지 버림)

bar_count = 1




3 - for문에서 출력

LEN이 20이므로 i = 0~20


if(bar_count > i) 

0~20까지 i가 증가하면서 bar_count와 비교하여 출력


bar_count는 현재 1이 저장되어있으므로 i가 0일때만 참



20번 반복하면서 =하나를 출력하게 되고

거짓인 경우에는 else 로 가서 공백을 출력합니다.



4 - for문으로 출력 후 퍼센트 출력 및 count 증가

count(현재 진행량)를 1 증가





위의 과정을 현재 진행량~전체 진행량까지 반복하여 100%가 되면 종료합니다.



LEN: 20

MAX: 1000



LEN: 40

MAX: 347





출력하는데 왜 이어서 출력이 되지않고 원래 위치 그대로에서 출력될까요?


그 문제는 18행에 있습니다.


printf("\r")



\r 이스케이프 시퀀스는 해당 라인의 첫 번째 위치로 이동합니다.


첫 번째로 이동한 후 다시 출력을 하게되어 위치가 바뀌지않고 진행되는이유입니다.






exe 파일은 LEN: 20, MAX: 1000으로 컴파일되어있습니다.

다른 값으로 테스트하고싶으시면 .c 소스파일로 수정 후 컴파일하시면 됩니다.


progress.exe


progress.c








감사합니다.

반응형
저작자표시 비영리 동일조건
    '언어 & 프레임워크/C & C++' 카테고리의 다른 글
    • [C/C++ 자료구조] 단일 연결리스트(Linked list) - 추가, 삭제
    • [C/C++ 자료구조] 단일 연결리스트(Linked list) - 이해
    • [C/C++] 콘솔게임 프로그래밍 (13) - 맵 오브젝트 제어[3] [최종]
    • [C/C++] 콘솔게임 프로그래밍 (12) - 맵 오브젝트 제어[2]
    이근둥
    이근둥
    새로운 것을 좋아하는 프론트엔드 개발자 ✨
    댓글쓰기

    티스토리툴바