C를 사용하여 터미널 실행 응용 프로그램에서 스핀 커서 인쇄

StackOverflow https://stackoverflow.com/questions/199336

  •  11-07-2019
  •  | 
  •  

문제

표준 C를 사용하여 터미널에서 실행되는 유틸리티에서 회전 커서를 어떻게 인쇄합니까?

나는 인쇄하는 것을 찾고 있습니다 : | / - 화면에서 같은 위치에 반복적으로?

감사

도움이 되었습니까?

해결책

백 스페이스 문자를 사용할 수 있습니다 (\b) 이와 같이:

printf("processing... |");
fflush(stdout);
// do something
printf("\b/");
fflush(stdout);
// do some more
printf("\b-");
fflush(stdout);

등이 필요합니다 fflush(stdout) 일반적으로 STDOUT는 Newline을 출력 할 때까지 버퍼링되기 때문입니다.

다른 팁

다음은 예제 코드입니다. 작업이 완료되는 동안 Advance_Cursor ()를 가끔씩 호출하십시오.

#include <stdio.h>

void advance_cursor() {
  static int pos=0;
  char cursor[4]={'/','-','\\','|'};
  printf("%c\b", cursor[pos]);
  fflush(stdout);
  pos = (pos+1) % 4;
}

int main(int argc, char **argv) {
  int i;
  for (i=0; i<100; i++) {
    advance_cursor();
    usleep(100000);
  }
  printf("\n");
  return 0;
}

나는 오래 전에 그렇게했다. 두 가지 방법이 있습니다.

  1. NCURSE와 같은 라이브러리를 사용하여 터미널을 제어 할 수 있습니다. 이것은 당신이 이런 종류의 일을 많이하고 싶다면 잘 작동합니다. 당신이 이것을 하나의 작은 지점에 있다면, 그것은 분명히 과도합니다.

  2. 제어 문자를 인쇄하십시오.

먼저 "/", 그런 다음 0x08 (백 스페이스), 그런 다음 "-", 그런 다음 0x08, ""를 인쇄합니다 ....

백 스페이스 캐릭터는 커서 위치를 하나의 공간으로 이동 시키지만 현재 문자를 덮어 쓰기 전까지는 현재 문자를 남겨 둡니다. 타이밍을 올바르게 얻으십시오 (따라서 빨리 또는 느리게 회전하지 않습니다).

당신은 또한 사용할 수 있습니다 아르 자형:

#include <stdio.h>
#include <unistd.h>

void
advance_spinner() {
    static char bars[] = { '/', '-', '\\', '|' };
    static int nbars = sizeof(bars) / sizeof(char);
    static int pos = 0;

    printf("%c\r", bars[pos]);
    fflush(stdout);
    pos = (pos + 1) % nbars;
}

int
main() {
    while (1) {
        advance_spinner();
        usleep(300);
    }

    return 0;
}

C 표준 라이브러리이기 때문에이를 수행하는 진정한 "표준"방법은 없습니다 (http://members.aol.com/wantondeb/)는 원시 터미널/콘솔 출력을 수행하는 기능을 제공하지 않습니다.

DOS/Windows 콘솔에서 표준적인 방법은 다음과 같습니다. conio.h, UNIX/Linux 아래 에서이 목적으로 허용 된 라이브러리는 다음과 같습니다. ncurses (ncurses 기본적으로 MBCook가 말하면서 말단 독립적 인 방식으로 묘사 한 제어 특성 동작을 캡슐화합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top