zoukankan      html  css  js  c++  java
  • fprintf 控制台代码,可以控制光标等,控制台显示时间源码

     http://blog.csdn.net/liumang_D/archive/2009/11/30/4907083.aspx

    给printf的输出加上些特效比如颜色,可以让打印信息更鲜明,在debug的时候特别有用。

    颜色:

    #define NONE         "\033[m" 
    #define RED          "\033[0;32;31m" 
    #define LIGHT_RED    "\033[1;31m" 
    #define GREEN        "\033[0;32;32m" 
    #define LIGHT_GREEN  "\033[1;32m" 
    #define BLUE         "\033[0;32;34m" 
    #define LIGHT_BLUE   "\033[1;34m" 
    #define DARY_GRAY    "\033[1;30m" 
    #define CYAN         "\033[0;36m" 
    #define LIGHT_CYAN   "\033[1;36m" 
    #define PURPLE       "\033[0;35m" 
    #define LIGHT_PURPLE "\033[1;35m" 
    #define BROWN        "\033[0;33m" 
    #define YELLOW       "\033[1;33m" 
    #define LIGHT_GRAY   "\033[0;37m" 
    #define WHITE        "\033[1;37m"
    比如:

    printf("\033[31m ####----->> \033[32m" "hello\n" "\033[m");
    颜色分为背景色和字体色,30~39用来设置字体色,40~49设置背景:

            背景色                        字体色
            40: 黑                          30: 黑
            41: 红                          31: 红
            42: 绿                          32: 绿
            43: 黄                          33: 黄
            44: 蓝                          34: 蓝
            45: 紫                          35: 紫
            46: 深绿                      36: 深绿
            47: 白色                      37: 白色

    记得在打印完之后,把颜色恢复成NONE,不然再后面的打印都会跟着变色。

    另外,还可以加一些ANSI控制码。加颜色只是以下控制码中的一种:

    \033[0m   关闭所有属性   
    \033[1m   设置高亮度   
    \033[4m   下划线   
    \033[5m   闪烁   
    \033[7m   反显   
    \033[8m   消隐   
    \033[30m   --   \033[37m   设置前景色   
    \033[40m   --   \033[47m   设置背景色   
    \033[nA   光标上移n行   
    \033[nB   光标下移n行   
    \033[nC   光标右移n行   
    \033[nD   光标左移n行   
    \033[y;xH设置光标位置   
    \033[2J   清屏   
    \033[K   清除从光标到行尾的内容   
    \033[s   保存光标位置   
    \033[u   恢复光标位置   
    \033[?25l   隐藏光标   
    \033[?25h   显示光标

    一个比较实用的例子,可以延伸很多东西哦!

    1. //使用终端的控制码做的,在当前终端动态显示时间  
    2. #include <stdio.h>  
    3. #include <stdlib.h>  
    4. #include <unistd.h>  
    5. #include <assert.h>  
    6. #include <signal.h>  
    7. #include <time.h>  
    8.   
    9. void hangup(int sig)  
    10. {  
    11.     exit(sig);  
    12. }  
    13.   
    14. int main(int argc, char *argv[])  
    15. {  
    16.     FILE *fp = NULL;  
    17.     char datestr[11] = {0};  
    18.     char timestr[10] = {0};  
    19.     char dkcmd[]="\033[2h";  
    20.     char ekcmd[]="\033[2l";  
    21.     char sccmd[]="\0337";  
    22.     char rccmd[]="\0338";  
    23.     char lc1cmd[]="\033[1;70f";  
    24.     char lc2cmd[]="\033[2;71f";  
    25.     time_t tm;  
    26.   
    27.     fp=fopen(ttyname(STDERR_FILENO), "w"); //这里用的是标准错误输出  //可改为"/dev/tty0"就是lcd控制台
    28.     assert(fp); //判定fp不为NULL,如果为NULL,运行时会反应出对应的错误并终止程序的运行  
    29.     signal(SIGHUP, hangup);  
    30.       
    31.     while(1){  
    32.         time(&tm);  
    33.         strftime(datestr,sizeof(datestr),"%Y-%m-%d",localtime(&tm));  
    34.         strftime(timestr,sizeof(timestr),"%H:%M:%S",localtime(&tm));  
    35.         fprintf(fp,"%s",dkcmd);  
    36.         fprintf(fp,"%s",sccmd);  
    37.         fprintf(fp,"%s",lc1cmd);  
    38.         fprintf(fp,"%s",datestr);  
    39.         fprintf(fp,"%s",lc2cmd);  
    40.         fprintf(fp,"%s",timestr);  
    41.         fprintf(fp,"%s",rccmd);  
    42.         fprintf(fp,"%s",ekcmd);  
    43.         fflush(fp);  
    44.         sleep(1);  
    45.     }  
    46.   
    47.     fclose(fp);  
    48.     return 0;  
    49. }  
  • 相关阅读:
    NOIP2016-2020 复盘
    「笔记」线段树合并/分裂
    「笔记」线性基
    20210628模拟赛解题报告
    「笔记」左偏树
    题解 CF718C Sasha and Array
    一些杂碎的知识点
    20210614 模拟赛
    洛谷 P4249 [WC2007]剪刀石头布
    CF132E Bits of merry old England
  • 原文地址:https://www.cnblogs.com/leaven/p/1654550.html
Copyright © 2011-2022 走看看