/******************************************
* 文件名:circleChar.c
* 功能描述:使用字符模拟跑马灯效果-Linux平台下
* 编辑人:王廷云
* 编辑日期:2017-10-10
* 修改日期:2018-1-12
*******************************************/
#include <stdio.h>
#include <unistd.h>
#define NR 5 // 数组的维数
/* 功能函数声明 */
void showArray(char ar[NR][NR]); // 显示数组结果
void moveArray(char ar[NR][NR]); // 旋转数组
/* 程序从主函数开始
* 思路:
* 显示数组->延时一段时间->顺时针移动数组->显示数组(如此反复)
*/
int main(int argc, char **argv)
{
/* 待显示数组 */
char ar[NR][NR] = {
"01234",
"f 5",
"e 6",
"d 7",
"cba98",
};
/* 初始化屏幕 */
fprintf(stdout, "\033[2J\n"); // 清屏
/* 进入循环跑马灯效果 */
while (1)
{
showArray(ar); // 显示数组
usleep(500000);// 等待一段时间
moveArray(ar); // 旋转数组
}
return 0; // 由于是死循环所以无法到达这里,只能强制结束程序
}
/*
* 函数名:showArray
* 函数功能:显示移动后的数组
* 参数:待显示的数组
* 返回值:无
*/
void showArray(char ar[NR][NR])
{
int x, y;
/* 设置显示效果 */
fprintf(stdout, "\033[1;1H"); // 定位到第一行第一列
fflush(stdout); // 刷新
/* 循环打印数组所有元素 */
for (y = 0; y < NR; y++)
{
for (x = 0; x < NR; x++)
{
fprintf(stdout, "\033[1;32m%c", ar[y][x]);
}
fputc('\n', stdout);
}
}
/*
* 函数名:moveArray
* 函数功能:对数组元素进行顺时针旋转移动
* 参数:待移动的数组
* 返回值:无
*/
void moveArray(char ar[NR][NR])
{
char temp;
int i;
/* 提取第一个元素 */
temp = ar[0][0];
/* 移动第一列 */
for (i = 1; i < NR; i++)
{
ar[i-1][0] = ar[i][0]; // 第一列所有元素往上移动
}
/* 移动最后一行 */
for (i = 1; i < NR; i++)
{
ar[NR-1][i-1] = ar[NR-1][i]; // 最后一行所有元素往左移动
}
/* 移动最后一列 */
for (i = NR-2; i >= 0; i--)
{
ar[i+1][NR-1] = ar[i][NR-1]; // 最后一列所有元素往下移动
}
/* 移动第一行 */
for (i = NR-2; i >= 1; i--)
{
ar[0][i+1] = ar[0][i]; // 第一行所有元素往右移动
}
/* 放好最开始提取的元素 */
ar[0][1] = temp;
}
【C语言】之使用字符模拟跑马灯效果
最新推荐文章于 2021-05-19 01:50:47 发布