如何使光标旋转

时间:2011-04-21 12:27:25

标签: c++ c

我想做的是做这样的事情:

打印\然后|然后/然后_,然后循环播放。这是我的代码:

#include <stdio.h>  

int main()  
{ 
   while(1)
   {
           printf("\\");
           printf("|");
           printf("/");
           printf("_");
   }
   return 0;  
}

我面临的问题是它按顺序打印,如何在C或C ++中使用一段时间延迟在同一光标位置打印?

7 个答案:

答案 0 :(得分:4)

我无法正确理解How to make cursor rotate的含义?但是你有没有机会想做这样的事情:

#include <stdio.h>  
#include <time.h>  

#define mydelay 100

void delay(int m)
{
    clock_t wait = m+ clock();
    while (wait > clock());
}


int main()  
{  
   while(1)
   {
           printf("\\\b");
           delay(mydelay);
           printf("|\b");
           delay(mydelay);
           printf("/\b");
           delay(mydelay);
           printf("_\b");
           delay(mydelay);
   }

   return 0;  
}

答案 1 :(得分:2)

#include <stdio.h>  

int main()  
{ 
   while(1)
   {
           printf("\\");  printf("%c", 8); // 8 is the backspace ASCII code.
           printf("|");  printf("%c", 8);  // %c is the printf format string for single character
           printf("/");  printf("%c", 8);  // assuming output to a terminal that understands
           printf("_");  printf("%c", 8);  // Backspace processing,  this works.
   }
   return 0;  
}

如果您需要延迟,请在您自己的延迟功能中添加一个忙碌等待,或者呼叫睡眠或进行其他处理的呼叫。

答案 2 :(得分:2)

#include <stdio.h>
#include <stdlib.h>    /* for sleep() */

int main(void)
{
  fprintf(stderr,"Here we are:  ");

  while(1)
  {
    fprintf(stderr,"\b\\");
    sleep(1);
    fprintf(stderr,"\b|");
    sleep(1);
    fprintf(stderr,"\b/");
    sleep(1);
    fprintf(stderr,"\b-");
    sleep(1);
  }

  return 0;
}

答案 3 :(得分:2)

您可以在打印后添加退格符(\b),但这是否完全取决于显示程序输出的环境。

您还需要引入延迟,以便您可以实际看到更改(尽管这可能会自然而然地发生,作为更广泛算法的一部分)。

#include <cstdio>
#include <cstdlib>

int main()  
{ 
   while(1) {
           printf("\\\b"); sleep(1);
           printf("|\b");  sleep(1);
           printf("/\b");  sleep(1);
           printf("_\b");  sleep(1);
   }
   return 0;  
}

您还可以查看the curses library以获取正确的基于文本的GUI fu。

答案 4 :(得分:1)

您可以在回弹的开头添加回车符。

e.g。

printf("\r|");
sleep(1);

或在打印后添加退格.-

答案 5 :(得分:0)

在C或C ++中没有标准的方法可以做到这一点。

您可以使用第三方库,如ncurses或ANSI转义序列(如果在Unix OS上)。

答案 6 :(得分:0)

在C中,您可以使用'\ b'或ascii值8打印退格符。在每次打印前使用它。我想你需要在两个打印语句之间有一些延迟。