【C语言】之使用字符模拟跑马灯效果

/******************************************
 * 文件名: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;				 
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值