通过backspace,或者,carriage return,但是不换行,在原来的输出上覆盖新的输出,实现Flying Hello World! 的效果。

#include<stdio.h>
#include<string.h>
#include<unistd.h> // sleep函数需要该头文件
int main() { char a[] = "Hello, World! Hello, China! "; int len; int i, j; len = strlen(a); for (i = 0; i < len * 10; i++) // 循环次数设定:字符数乘上10,自定义,无定规。 { //printf("\r"); // Carriage Return,回到开头,但不换行。
// 和下面两行等价效果。
for (j = 0; j < len; j++) // 打印len个backspace, 本质是把光标回到一行的开始,
printf("\b"); // 以便重新打印输出新的字符。也可以用前面的\r替代。
for (j = 0; j < len; j++) // 循环打印输出一行字符,但是第一个字符的选取会
// 随着i的递增而往后延一个字符。
printf("%c", a[(i + j) % len]);// 原本i+j是一直递增的,但是经过%取模运算,其
// 取值范围正好位于0到len-1之间,正好在字符数
// 组中循环输出字符。
sleep(1); // 休息1秒 } return 0; }

但是,大家如果把这个代码放到onlineIDE上运行,会发现无效。原因是onlineIDE不支持\b或\r的输出。

You have no rights to post comments