當前位置:首頁 » 編程語言 » c語言怎麼在屏幕改字
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言怎麼在屏幕改字

發布時間: 2023-03-24 08:49:50

1. 我想讓一些文字慢慢出現在屏幕,用c語言怎麼弄

//相同內容顯唯拍渣示
#include<windows.h>
······
for(i=0;i<指悄100;i++)
{
printf("內容");
Sleep (200);//每個字顯示間隔200ms
}

//不同內容,文件讀寫顯示
······
FILE *fp;
char ch;
fp=fopen("f:\\QQ.txt","r");//文件位置賀喚,只讀
while((ch=fgetc(fp))!=EOF)
{
Sleep(270);
putchar(ch);//顯示一個字元
}
fclose(fp);

//同理,可以把要顯示的內容存放在數組里,然後用上面的方法顯示出來

2. C語言編寫函數,從屏幕輸入一行字元將所有的大寫字母轉換為小寫字母,所有的小寫字母轉換為大寫字母

#include <豎態stdio.h>
#include <string.h>
#include <ctype.h>

int main()
{
int i, len;
char str[100];
gets(str);
len=strlen(str);
for (i = 0; i < len; i++)
if (isalpha(str[i]))
{
str[i] ^= 32;
}
puts(str);
return 0;
}

其中用到了一個函數isalpha(),作用是判斷參數是否為英文字母。當參數為英文字母a-z或A-Z時,返回非零值,否則返回掘纖橡零。這個函數用到的頭文件是ctype.h。

下面解釋核心部分 " str[i] ^= 32; "

我們知判旁道同一個英文字母大小寫的ASCII碼相差32。假設我們現在有二個字母"S"和"s",大寫"S"的ASCII碼為83,小寫"s"的ASCII碼為115,我們將32、83、115的二進制碼列出來。

83 1010011
32 0100000(最低位為第一位,只有第六位是1,其他位都是0)
115 1110011

我們來回顧一下異或運算符(XOR)的特點:

與0異或時,它的值不變。
與1異或時,它的值相反。

因此,對比上面的豎式,我們可以很清楚地看到,只要將英文字母ASCII碼的第6位與1異或,其他位與0異或,即可實現英文字母的大小寫互換。也就是讓英文字母的ASCII碼與32異或即可。

3. 急!c語言如何顯示漢字

先說明一下:在TC下面顯示漢字是比較麻煩的,實在想用,可以用VC。

DOS下的點陣漢字

你是否碰到過用啟動盤啟動系統後用DIR命令得到一串串莫名其妙的字元?有經驗的朋友會告訴你:那是漢字。漢字?你不禁會問:怎麼一個我一個也不認識。但那確確實實是漢字,如果你啟動UCDOS或其他的漢字系統後,就會看到那是一個個熟悉的漢字。同樣是漢字,為什麼前後會看到不同的結果?呵呵,其實在電腦硬體中,根本沒有漢字這個概念,也沒有英文的概念,這鐵玩意認識的概念只有——內碼。

☆漢字的內碼

點頭表示什麼?是「對」、「YES」,偏偏有的地方表示的意義卻恰恰相反。一個動作,有不同的詮釋;一個問題,有不同的答案;而一個符號,卻有不同的意義,關鍵在於:你是如何地理解。在電腦中亦如此,所有的數據都是以0和1保存的,按不同的數據操作,可以得到不同的結果。對於顯示英文操作,由於英文字母種類很少,只需要8位(一位元組)即可。而對於中文,常用卻有5000以上,於是我們的DOS前輩想了一個辦法,就是將ASCII表的高128個很少用到的數值以兩個為一組來表示漢字,即漢字的內碼。而剩下的低128位則留給英文字元使用,即英文的內碼。不信,你可以用記事本寫一C文件:
main()
{
unsigned char *s,*e="ABcd",*c="你好";
clrscr();
printf("English char =");

s=e;
while(*s!=0) /*C的字元串以0為結束符*/
{
printf("%3d,",*s);
s++;
}
printf("\nChinease char=");
s=c;
while(*s!=0)
{
printf("%3d,",*s);
s++;
}
getch();
}
再用TC輸入*.txt打開運行,看見了沒有,那些數值即英文和漢字的各位元組內碼。

☆漢字字模

得到了漢字的內碼後,還僅是一組數字,那又如何在屏幕上去顯示呢?這就涉及到文字的字模,字模雖然也是一組數字,但它的意義卻與數字的意義有了根本的變化,它是用數字的各位信息來記載英文或漢字的形狀。在硬體系統內,英文的字模信息一般固化在ROM里,即使在沒有進入系統的CMOS里,也可以讓你看到英文字元。而在DOS下,中文的字模信息一般記錄在漢字型檔文件HZK16里。

☆漢字型檔文件

了解字母和漢字是按字模位信息顯示的原理後,那如何得到漢字的字模信息呢?難道要我們自己去做?NO。DOS前輩們經過艱辛的努力,將製作好的字模放到了一個個標準的庫中以免去後輩的麻煩,這就是點陣字型檔文件。一般我們使用16*16的點陣宋體字型檔,所謂16*16,是每一個漢字在縱、橫各16點的區域內顯示的。不過後來又有了HZK12、HZK24,HZK32和HZK48字型檔及黑體、楷體和隸書字型檔。雖然漢字型檔種類繁多,但都是按照區位的順序排列的。前一個位元組為該漢字的區號,後一個位元組為該字的位號。每一個區記錄94個漢字,位號則為該字在該區中的位置。因此,漢字在漢字型檔中的具體位置計算公式為:94*(區號-1)+位號-1。減1是因為數組是以0為開始而區號位號是以1為開始的。這僅為以漢字為單位該漢字在漢字型檔中的位置,那麼,如何得到以位元組為單位得到該漢字在漢字型檔中的位置呢?只需乘上一個漢字字模佔用的位元組數即可,即:(94*(區號-1)+位號-1)*一個漢字字模佔用位元組數,而按每種漢字型檔的漢字大小不同又會得到不同的結果。以16*16點陣字型檔為例,計算公式則為:(94*(區號-1)+(位號-1))*32。漢字型檔文該從該位置起的32位元組信息即記錄了該字的字模信息。

☆點陣漢字的顯示

了解點陣漢字及漢字型檔的構成原理後,顯示漢字就變得簡單。以16*16點陣字型檔為例,通常的方法是:將文件工作指針移到需要的漢字字模處、將漢字型檔文件讀入一2*16數組再用for循環一位位地顯示。以使用VGAHI模式顯示「我」字為例,程序如下:
#include "graphics.h"
#include "stdio.h"
main()
{
int i=VGA,j=VGAHI,k;
unsigned char mat[16][2],chinease[3]="我";
FILE *HZK;
if((HZK=fopen("hzk16","rb"))==NULL)exit(0);
initgraph(&i,&j,"");
i=chinease[0]-0xa0;j=chinease[1]-0xa0; /*獲得區碼與位碼*/
fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET);
fread(mat,32,1,HZK);
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++)
if(mat[j][i]&(0x80>>k)) /*測試為1的位則顯示*/
putpixel(i*8+k,j,WHITE);

getch();
closegraph();
fclose(HZK);
}
怎麼樣?只要掌握了正確的方法,顯示漢字並不復雜。

☆列印字型檔文件和HZK12

如果你有UCDOS的HZK24S(宋體)、HZK24K(楷體)或HZK24H(黑體),你還可以使用不同字體的大字模漢字了。HZK24系列是24*24的點陣字型檔,每字模佔用3*24位元組。如果你按照HZK16的顯示方法的話,你會看到......呵呵,字被放倒了。這是因為該類字型檔與一般的漢字型檔不同,這類大字模漢字型檔是專供列印的列印字型檔,為了列印的方便將字模都放倒了,你使用時,只要將字模的位信息縱橫轉置顯示即可。例如你如果定義為mat[24][3]則應該這樣輸出:
for(i=0;i<24;i++)
for(j=0;j<24;j++)
if((0x80>>i%8)&mat[j][i/8]) /*轉置顯示*/
putpixel(j+x,y+i,color);
還有一類字型檔HZK12,雖然屬於標准字型檔類型,但如果你將它的字模當作12*12位計算的話,根本無法正常顯示漢字。因為字型檔設計者為了使用的方便,字摸每行的位數均補齊為8的整數倍,於是實際該字型檔的位長度是16*12,雖然每行都多出了4位,但這4位都是0(不顯示),並不影響顯示效果。

☆理論差不多了下面是我寫的一個實踐例子
/*
*TC下的漢字顯示演示程序
*LO幾又VE 22:58 2005-5-23
*將hzk16文件放至TC安裝目錄下
*hzk16文件下載地址
*下載字體文件
*/
#include <graphics.h>
#include <stdio.h>

#define MAXX 640 /*屏幕寬度 */
#define MAXY 480 /*屏幕高度 */
#define WIDTH 20 /*每一漢字寬度*/
#define HIGH 20 /*每一漢字高度*/

int priChi(unsigned char *); /*中文列印函數,傳入參數:中文數組指針 返回值 -1 異常 0 正常*/

int X=0; /*全局變數X Y控制中文列印格式*/
int Y=0;

int main()
{
char chinese[][60]={/*TC編譯器不支持長行 所以將中文字元串以二維形式存放*/
"我放棄清華計算機專業的保送資格而選擇參加高考的消息震撼了全校",
"從校長到班主任到各科目任課老師都找我談過話我有點驚異他們的變",
"化在我獲得全國信息大賽一等獎外加特別獎以前我似乎是個可有可無",
"的人物突然間變的如此的炙手可熱我覺得我的大腦前所未有的不夠用",
"說起這個特別獎還真的挺有意思雖然叫全國決賽但也無非是出幾個筆",
"試題再弄個上機程序編一下限時總共是三小時規定語言是西語言或者",
"派司卡在我花了半個小時分別用兩種語言把該程序完成後我覺得坐在",
"那實在是浪費我的大好青春於是我決定用匯編語言把它再寫一遍本來",
"我准備用微操作的十六進制碼寫的但考慮到時間問題只好放棄有人說",
"是金子總會發光此話誠不欺我啊正當我熱火朝天全心投入編程的時候",
"卻不知道自己已經被某人注意了很久了三小時之後我走出考場之後某",
"人趕緊抓住我很興奮的叫了一聲小朋友這聲小朋友直接導致我在數年",
"後還經常從噩夢中驚醒同時也是我拒絕清華邀請的直接導火索我們把",
"話題回到事發現場我在嚇了很大一跳後把頭轉了回來一個瘦干老頭正",
"抓著我的手兩眼放光的樣子還似乎是略帶深情的看著我我全身雞皮疙",
"瘩頓時爭先恐後的向外鑽我渾身一個機靈趕緊抖手老頭似乎感覺到了",
"異樣送開我的手略帶尷尬的道小朋友我自我介紹一下我是清華大學計",
"算機系的主任受邀到比賽的現場觀看順便看看有沒有什麼可挖掘的人",
"才那個你明白我的意思吧這句話很是影響清華學生理解力在我心目中",
"的地位你這意思不就是認為我是可挖掘的人才嗎我點了點頭老頭看我",
"能理解顯的很興奮然後開始滔滔不決的向我介紹清華計算機專業的實",
"力如何如何的雄厚在國內甚至國際是如何如何的有影響力最後滿懷深",
"情的看了我眼嚴肅的告訴我他將代表清華計算機專業歡迎我去他們那",
"念書我苦苦忍耐著他的飛濺唾沫委婉的表示這件事非同小可我必須回",
"家和父母商量一下然後逃也似的離開當然第一個去的地方是衛生間我",
"的臉啊誰知道老頭的唾沫會不會讓我的臉起老年斑回到學校的一個禮",
"拜後我就接到了清華正式邀請這個消息經我班主任的烏鴉嘴迅速在全",
"校蔓延而後又經過各種渠道迅速匯總到我父母耳朵"};

if(-1 == priChi(chinese))
{ /*列印異常*/
printf("Press any key to exit...");
fflush(stdin);
getch();
return 1;
}
return 0;
}

int priChi(unsigned char *chi)
{
unsigned char mat[16][2];
int i=VGA,j=VGAHI,k;
int sec,pot;
FILE *HZK;
if((HZK=fopen("hzk16","rb"))==NULL) /*打開字體庫文件*/
{
printf("Open style file (hzk16) failed!\n");
return -1;
}
initgraph(&i,&j,"");
while(*chi)
{
sec = *chi-0xa0; /*獲得區碼*/
pot = *(chi+1)-0xa0; /*獲得位碼*/
fseek(HZK,(94*(sec-1)+(pot-1))*32l,SEEK_SET);
fread(mat,32,1,HZK);
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++)
if(mat[j][i] & (0x80 >> k)) /*測試為1的位則顯示*/
putpixel(X+i*8+k,Y+j,WHITE);
X += WIDTH; /*下一字元的橫坐標*/
if(X >= MAXX)
{
X = 0;
Y += HIGH; /*下一字元的縱坐標*/
if(Y >= MAXY) /*滿一頁*/
{
printf("press any key to print other words");
getch();
system("cls"); /*清屏*/
Y = 0;
}
}

chi += 2; /*指針指向下一中文字元*/
}
getchar();
closegraph();
fclose(HZK);
return 0;
}

4. c語言怎麼弄滿屏自己名字

設置中操作。操作步驟如下:
1、打開c語言,輸入自己的名字。
2、打開設置,找到滿屏,點擊滿屏就可以。

5. c語言:編寫程序在屏幕上顯示自己的英文名字

話說那個英文名字是自己輸入的嘛……如果是的話就用下面這個程序
#include <stdio.h>

char ch[80];

main()
{
ch=""; //在這里修賣數伍改即可
//當中或然如果是從畢槐屏幕讀入的話就改成 scanf("%s", ch);
printf("%s\n", ch);
}

6. c語言怎樣實現運行屏幕的白底黑字

windows下面最簡單的辦法就是調用:\x0d\x0asystem("color F0");\x0d\x0a這樣就黑底白字了!!!\x0d\x0a以下是color命令的幫助:\x0d\x0a設置默認的控制台前景和背景顏色。\x0d\x0a\x0d\x0aCOLOR [attr]\x0d\x0a\x0d\x0a attr 指定控制台輸出的顏色屬性\x0d\x0a\x0d\x0a顏色屬性由兩個十六進制數字指定 -- 第一個為背景,第二個則為\x0d\x0a前景。每個數字可以為以下任何值之一:\x0d\x0a\x0d\x0a 0 = 黑色 8 = 灰色\x0d\x0a 1 = 藍色 9 = 淡藍色\x0d\x0a 2 = 綠色 A = 淡綠色\x0d\x0a 3 = 淺綠色 B = 淡淺綠色\x0d\x0a 4 = 紅色 C = 淡紅色\x0d\x0a 5 = 紫色 D = 淡紫色\x0d\x0a 6 = 黃色 E = 淡黃色\x0d\x0a 7 = 白色 F = 亮白色\x0d\x0a\x0d\x0a如果沒有給定任何參數,該命令會將顏色還原到 CMD.EXE 啟動時\x0d\x0a的顏色。這個值來自當前控制台窗口、/T 命令行開關或\x0d\x0aDefaultColor 注冊表值。\x0d\x0a\x0d\x0a如果用相同的前景和背景顏色來執行 COLOR 命令,COLOR 命令\x0d\x0a會將 ERRORLEVEL 設置為 1。\x0d\x0a\x0d\x0a例如: "COLOR fc" 在亮白色上產生亮紅色\x0d\x0a\x0d\x0a如果你不想用color來做那麼\x0d\x0a\x0d\x0aTC 下可以這么做:\x0d\x0a在開始的時候要調用graphics.h這個頭文件\x0d\x0a\x0d\x0a setbackcolor() 設置背景顏色函數\x0d\x0a\x0d\x0a功能: 函數setbackcolor()把當前調色板顏色的第一個值改成指定的顏色值,以設置背景顏色。\x0d\x0a用法: 此函數調用方式為void setbackcolor(int color);\x0d\x0a說明: 參數color為指定的背景色,其有效值可以是顏色符號名,也可以是色彩值。表1-8列出了背景顏色供選取。\x0d\x0a\x0d\x0a表1-8 背景顏色值\x0d\x0a-----------------------------------------------------------------\x0d\x0a 顏色符號名 色彩值 顏色符號名 色彩值\x0d\x0a-----------------------------------------------------------------\x0d\x0a BLACK(黑色) 0 DARKGRAY(深灰) 8\x0d\x0a BLUE(藍色) 1 LIGHTBLUE(淡藍) 9\x0d\x0a GREEN(綠色) 2 LIGHTGREEN(淡綠) 10\x0d\x0a CYAN(青色) 3 LIGHTCYAN(淡青) 11\x0d\x0a RED(紅色) 4 LIGHTRED(淡紅) 12\x0d\x0a MAGENTA(品紅) 5 LIGHTMAGENTA(粉紅) 13\x0d\x0a BROWN(棕色) 6 YELLOW(黃色) 14\x0d\x0a LIGHTGRAY(淡灰) 7 WHITE(白色) 15\x0d\x0a-----------------------------------------------------------------\x0d\x0a 調用該函數,將改變整個屏幕的顏色,如果新的背景色與原來屏幕的圖形顏色相同,盡管圖形信息不會丟失,但是看不見圖形了。如果所選背景色為對比鮮明的顏色,看不見的圖形就會重新清晰地顯現出來。\x0d\x0a\x0d\x0a 這個函數的頭文件為graphics.h\x0d\x0a\x0d\x0a返回值: 無\x0d\x0a\x0d\x0a例: 把背景色置為淡藍色\x0d\x0a\x0d\x0a setbackcolor(LIGHTBLUE);\x0d\x0a\x0d\x0a設置前景色(文字顏色)\x0d\x0a setcolor() 設置顏色函數\x0d\x0a\x0d\x0a功能: 函數setcolor()設置當前繪圖顏色(或稱做前景色)。\x0d\x0a用法: 該函數調用方式為voids setcolor(int color);\x0d\x0a說明: 參數color為選擇的當前繪圖顏色。在高解析度顯示模式下,選取的color是實際色彩值,也可以用顏色符號名表示。如果已經搖籃函數setpalette()改變了調色板色彩值,那麼符號名就不可能產生預期作用了。\x0d\x0a 在低解析度顯示模式(320X200)下,選取的color是調色板顏色號,不是實際色彩值。\x0d\x0a 此函數相應的頭文件為graphics.h\x0d\x0a返回值: 無\x0d\x0a\x0d\x0a例: 設置16種不同的顏色,顯示16段直線:\x0d\x0a\x0d\x0a#include\x0d\x0avoid main()\x0d\x0a{\x0d\x0a int driver,mode;\x0d\x0a int i;\x0d\x0a driver=DETECT;\x0d\x0a mode=0;\x0d\x0a initgraph(&driver,&mode,"");\x0d\x0a moveto(0,200);\x0d\x0a for(i=0;i<16;i++)\x0d\x0a {\x0d\x0a setcolor(i);\x0d\x0a linerel(20,0);\x0d\x0a }\x0d\x0a getch();\x0d\x0a restorecrtmode();\x0d\x0a}\x0d\x0a\x0d\x0aVC 下面可以用\x0d\x0aSetConsoleTextAttribute這個Window SDK API

7. C語言如何「畫"字輸出在屏幕上

C語言中,一御梁個漢字占兩個位元組,可以使用char 數組進行保存

示例:

#include<stdio.h>

intmain()
{
charch[3]="畫";
首拆歷printf("%s ",ch);
者搜return0;
}

執行結果:

8. 如何用C語言製作一個可以在開始屏幕上滾動的字幕

實現滾動字幕:

一、單行滾動,寫一個函數,每次調用讓全局或靜態字元數組向一個方向移位(比如左移,從最右邊一個非0字元開始遍歷,依次覆蓋左邊的一個字元,最左邊的字元被第二個字元覆蓋,最右邊一個非0位變移出的那個字元)。記得保留結束符號0。

二、之後循環列印字元數組。每次使用system("cls");清空控制台顯示。

三、多行滾動,同理,只不過把字元移動覆蓋,改成字元串移動覆蓋。(移動方向的後一行覆蓋前一行,把移動方向第一行內容賦值給最後一行)。

//ps:由於肉眼觀察,移動需要間隔,用Sleep函數,但該函數會讓線程停止,如滾屏間隔期間,還希望其它部分正常運行,需要寫線程。

下面是參考代碼:

#include<stdio.h>

#include <windows.h>

void sScreen(char str[],int len,int f);//len:內容長度,不包含結束符號。f=1向左移動。f=0向右移動;

int main()

{

char str[]="I LOVE YOU";

while(1)

{

printf("%s ",str);

sScreen(str,10,0);

Sleep(1000);

system("cls");

}

return 0;

}

void sScreen(char str[],int len,int f)

{

int i;

char c;

if(f)

{

c=str[0];

for(i=0;i<len-1;i++)

str[i]=str[i+1];

str[len-1]=c;

}

if(!f)

{

c=str[len-1];

for(i=len-1;i>0;i--)

str[i]=str[i-1];

str[0]=c;

}

}

9. c語言中怎麼改變輸出的字體

函數名: settextstyle
功 能: 為圖形輸出設置當前的文本屬性
用 法: void far settextstyle (int font, int direction, char size);
fornt 為字體:DEFAULT_FONT, TRIPLEX_FONT, SMALL_FONT, SANSSERIF_FONT, GOTHIC_FONT,也可以用0 ~ 4代替。
direction 為字元的排列方向:橫向和豎向,0為橫向排列,1為豎向排列。
size 為字體大小:可用interger做參數。

只能選擇5個字體。但如果你有不同的中文字型檔,可以輸出不同的中文字體。