????????Hello大家好!最近剛剛做完C語言的課程設(shè)計。在評分標準中有一項是展示界面美觀整潔。學前端的我對花里胡哨的界面情有獨鐘,這里為大家簡單介紹三種改變字體顏色的方法。
????????注意:本文中所有演示截圖均來自VS 2022。
目錄
?改變C語言顯示界面字體顏色的三種方式
? system顏色函數(shù)?
? \033特殊轉(zhuǎn)義字符?
?SetConsoleTextAttribute函數(shù)??
?改變C語言顯示界面字體顏色的三種方式
? system顏色函數(shù)?
????????首先介紹的是最簡單的一種更改顏色方式。但簡單的同時,他的效果不會太靈活。?
????????system?函數(shù)包含于??#include<stdlib.h>??頭文件中。設(shè)置默認的控制臺前景和背景顏色是它眾多功能之一。基本語法如下:
system("color xy");
?????????其中,x 和 y 為兩個十六進制數(shù)字,分別用于設(shè)定背景色以及前景色(字體顏色)。注意 x 和 y 兩個字符間沒有空格也沒有逗號,格式不標準時運行程序會打印出該函數(shù)的用法。x , y可以對應(yīng)以下任意值:
0 = 黑色 | 4 = 紅色 | 8 = 灰色 | C = 淡紅色 |
1 = 藍色 | 5 = 紫色 | 9 = 淡藍色 | D = 淡紫色 |
2 = 綠色 | 6 = 黃色 | A = 淡綠色 | E = 淡黃色 |
3 = 淺綠色 | 7 = 白色 | B = 淺淡綠色 | F = 亮白色 |
????????如果沒有給定任何參數(shù),此命令會將顏色還原到 CMD.EXE 啟動時的顏色。這個值來自當前控制臺窗口、/T 命令行開關(guān)或 DefaultColor 注冊表值。
????????如果嘗試使用相同的前景和背景顏色來執(zhí)行COLOR 命令,COLOR 命令會將 ERRORLEVEL 設(shè)置為 1。
? ? ? ? 值得注意的是,你可能在網(wǎng)上看到過別人使用 system 函數(shù)時引用了 #include<Windows.h> 頭文件,并成功使用了 system 函數(shù)。#include<Windows.h>?主要針對操作系統(tǒng),包含大多數(shù)對系統(tǒng)有用的函數(shù),如 Sleep, system 等。#include<stdlib.h>主要包含了一些宏指令和動態(tài)函數(shù),如free(),malloc()等。筆者猜想,兩個頭文可能包含有少數(shù)相同的函數(shù),遇到這種函數(shù)的時候,兩個頭文件用哪個都可以。(憑空猜想,歡迎評論區(qū)指正)
? ? ? ? 現(xiàn)在我們運行一下程序試試吧!
#include<stdio.h>
#include<windows.h>
int main()
{
system("color EC");
printf("這是第一行\(zhòng)n");
system("color 74");
printf("這是第二行");
return 0;
}
結(jié)果如下:?

????????哇缺!怎么回事!背景色是 7(白色),前景色是 4(紅色),代碼第五行完全沒有參與感捏!這是因為 system 函數(shù)加上 color 指令 是對整個控制臺的文本屬性進行改變,只能把整個控制臺改成一種顏色,無法達到同一頁面顯示多種顏色的效果。這也就是剛剛介紹這個函數(shù)時說“他的功能不會太靈活”的原因。那么有沒有一種方式可以更加靈活地改變字體顏色呢?為此,我們引入下面兩個方法。
? \033特殊轉(zhuǎn)義字符?
? ? ? ? ?what is \033??
? ? ? ? 八進制的 \033 即 ESC 符號,Windows 中,ESC的十進制為 \027,十六進制為 \x1b。學過 HTML 的同學可能會覺得 \033 的用法和前端的標簽有些像,常常成對兒出現(xiàn)。標準語法如下:
\033[參數(shù)1;參數(shù)2;參數(shù)3m
? ? ? ? 該轉(zhuǎn)義字符直接應(yīng)用于printf()函數(shù)中,這串代碼生效即意味著從程序執(zhí)行到這里開始,后面所有的屏幕打印字符均以該代碼指定的效果顯示。所以一般使用\033 進行顏色改變后,應(yīng)當使用 \033[0m 進行還原。參數(shù) 1 指定顯示方式,參數(shù) 2 指定前景色(字體顏色),參數(shù) 3 指定背景色。參數(shù) 3 后緊接小寫字母 m 表示結(jié)束。相關(guān)參數(shù)值與對應(yīng)效果如下:
單值控制碼(與顏色改變無關(guān)且不能與其他控制碼同時使用)?
控制碼 |
效果 |
---|---|
\033[nA | 光標上移 n 行 |
\033[nB | 光標下移 n 行 |
\033[nC | 光標右移 n 列 |
\033[nD | 光標左移 n 列 |
\033[y;xH | 設(shè)置光標位置 |
\033[2J | 清屏 |
\033[k | 設(shè)置光標位置(y行,x列) |
\033[s | 保存光標位置 |
\033[u | 恢復(fù)光標位置 |
\033[?25l | 隱藏光標 |
\033[?25h | 顯示光標 |
字體顏色(前景色)
控制碼 | 字體效果 |
---|---|
\033[0m | 關(guān)閉所有屬性 |
\033[1m | 設(shè)置字體 高亮度 |
\033[2m | 低亮(減弱)顯示 |
\033[4m | 下劃線 |
\033[5m | 閃爍 |
\033[7m | 反顯 |
\033[8m | 消隱 |
\033[30m | 黑色 |
\033[31m | 紅色 |
\033[32m | 綠色 |
\033[33m | 黃色 |
\033[34m | 藍色 |
\033[35m | 紫色 |
\033[36m | 淺藍色 |
\033[37m | 白色 |
?背景顏色
控制碼 | 背景效果 |
---|---|
\033[40m | 黑色 |
\033[41m | 紅色 |
\033[42m | 綠色 |
\033[43m | 黃色 |
\033[44m | 藍色 |
\033[45m | 紫色 |
\033[46m | 淺藍色 |
\033[47m | 白色 |
? ? ? ? ?你可能注意到了,顯示方式,前景色,背景色不同含義的數(shù)值都是唯一的且沒有重復(fù)。所以三個參數(shù)的書寫先后順序不做硬性要求,不過還是建議按照默認規(guī)范的格式書寫。三個參數(shù)可以只寫一到兩個。
? ? ? ? 下面做一個簡單的示范:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
printf("\033[43;1m高亮文字黃色背景\n");
printf("這是第二行\(zhòng)033[0m\n");
printf("\033[43;1m高亮文字黃色背景\033[0m\n");
printf("這是第四行\(zhòng)033[0m\n");
printf("這一行\(zhòng)033[43;1m作為測試\033[0m\n");
return 0;
}
?
? ? ? ? \033在筆者無論藍色還是紅色的Dev C++中都無法正常工作,暫時沒有找到原因和解決辦法。有沒有大佬可以評論區(qū)解答一手?
?SetConsoleTextAttribute函數(shù)??
? ? ? ? 函數(shù)頭文件:#include<Windows.h>
? ? ? ? 和\033類似地,代碼執(zhí)行到該函數(shù)時,后面所有的屏幕打印字符均以該代碼指定的效果顯示。基本語法如下:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),前景色 | 背景色 | 前景加強 | 背景加強);
? ? ? ? 關(guān)于這個代碼的用法,請戳下面鏈接查看大佬詳解~
? ? ? ? (我就是從這位大佬這里學的這個函數(shù)的用法)?
????????戳我,看大佬的講解。
? ? ? ? 本篇文章到此就結(jié)束咯,希望能對你有所幫助。淺點一手關(guān)注,下一周分享更多能把美觀分拿滿的小技巧。
? ? ? ? 留存問題:為什么\033代碼在Dev C++中無法使用?期待在評論區(qū)得到大佬的解答。文章來源:http://www.zghlxwxcb.cn/news/detail-772261.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-772261.html
到了這里,關(guān)于如何在C語言中將文字顯示為花里胡哨的多種顏色的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!