c語言圖形庫函數(shù)舉例子 如何用c語言圖形庫開發(fā)軟件

c語言 圖形函數(shù)

圖形函數(shù) 1. 圖形模式的初始化

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的商河網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器, 在不同

模式下也有不同分辨率。因此, 在屏幕作圖之前, 必須根據(jù)顯示器適配器種類將

顯示器設(shè)置成為某種圖形模式, 在未設(shè)置圖形模式之前, 微機(jī)系統(tǒng)默認(rèn)屏幕為文

本模式(80列, 25行字符模式), 此時所有圖形函數(shù)均不能工作。設(shè)置屏幕為圖形

模式, 可用下列圖形初始化函數(shù):

void far initgraph(int far *gdriver, int far *gmode, char *path);

其中g(shù)driver和gmode分別表示圖形驅(qū)動器和模式, path是指圖形驅(qū)動程序所

在的目錄路徑。有關(guān)圖形驅(qū)動器、圖形模式的符號常數(shù)及對應(yīng)的分辨率見表2。

圖形驅(qū)動程序由Turbo C出版商提供, 文件擴(kuò)展名為.BGI。根據(jù)不同的圖形

適配器有不同的圖形驅(qū)動程序。例如對于EGA、 VGA 圖形適配器就調(diào)用驅(qū)動程序

EGAVGA.BGI。 例4. 使用圖形初始化函數(shù)設(shè)置VGA高分辨率圖形模式

#include graphics.h

int main()

{

int gdriver, gmode;

gdriver=VGA;

gmode=VGAHI;

initgraph(gdriver, gmode, "c:\\tc");

bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/

getch();

closegraph();

return 0;

}

有時編程者并不知道所用的圖形顯示器適配器種類, 或者需要將編寫的程序

用于不同圖形驅(qū)動器, Turbo C提供了一個自動檢測顯示器硬件的函數(shù), 其調(diào)用

格式為:

void far detectgraph(int *gdriver, *gmode);

其中g(shù)driver和gmode的意義與上面相同。

例5. 自動進(jìn)行硬件測試后進(jìn)行圖形初始化

#include graphics.h

int main()

{

int gdriver, gmode;

detectgraph(gdriver, gmode); /*自動測試硬件*/

printf("the graphics driver is %d, mode is %d\n", gdriver,

gmode); /*輸出測試結(jié)果*/

getch();

initgraph(gdriver, gmode, "c:\\tc");

/* 根據(jù)測試結(jié)果初始化圖形*/

bar3d(10, 10, 130, 250, 20, 1);

getch();

closegraph();

return 0;

}

上例程序中先對圖形顯示器自動檢測, 然后再用圖形初始化函數(shù)進(jìn)行初始化

設(shè)置, 但Turbo C提供了一種更簡單的方法, 即用gdriver= DETECT 語句后再跟

initgraph()函數(shù)就行了。采用這種方法后, 上例可改為:

例6.

#include graphics.h

int main()

{

int gdriver=DETECT, gmode;

initgraph(gdriver, gmode, "c:\\tc");

bar3d(50, 50, 150, 30, 1);

getch();

closegraph();

return 0;

}

另外, Turbo C提供了退出圖形狀態(tài)的函數(shù)closegraph(), 其調(diào)用格式為:

void far closegraph(void);

調(diào)用該函數(shù)后可退出圖形狀態(tài)而進(jìn)入文本方式(Turbo C 默認(rèn)方式), 并釋放

用于保存圖形驅(qū)動程序和字體的系統(tǒng)內(nèi)存。

2. 獨(dú)立圖形運(yùn)行程序的建立

Turbo C對于用initgraph()函數(shù)直接進(jìn)行的圖形初始化程序, 在編譯和鏈接

時并沒有將相應(yīng)的驅(qū)動程序(*.BGI)裝入到執(zhí)行程序, 當(dāng)程序進(jìn)行到intitgraph()

語句時, 再從該函數(shù)中第三個形式參數(shù)char *path中所規(guī)定的路徑中去找相應(yīng)的

驅(qū)動程序。若沒有驅(qū)動程序, 則在C:\TC中去找, 如C:\TC中仍沒有或TC不存在,

將會出現(xiàn)錯誤:

BGI Error: Graphics not initialized (use 'initgraph')

因此, 為了使用方便, 應(yīng)該建立一個不需要驅(qū)動程序就能獨(dú)立運(yùn)行的可執(zhí)行

圖形程序,Turbo C中規(guī)定用下述步驟(這里以EGA、VGA顯示器為例):

1. 在C:\TC子目錄下輸入命令:BGIOBJ EGAVGA

此命令將驅(qū)動程序EGAVGA.BGI轉(zhuǎn)換成EGAVGA.OBJ的目標(biāo)文件。

2. 在C:\TC子目錄下輸入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA

此命令的意思是將EGAVGA.OBJ的目標(biāo)模塊裝到GRAPHICS.LIB庫文件中。

3. 在程序中initgraph()函數(shù)調(diào)用之前加上一句:

registerbgidriver(EGAVGA_driver):

該函數(shù)告訴連接程序在連接時把EGAVGA的驅(qū)動程序裝入到用戶的執(zhí)行程序中。

經(jīng)過上面處理,編譯鏈接后的執(zhí)行程序可在任何目錄或其它兼容機(jī)上運(yùn)行。

假設(shè)已作了前兩個步驟,若再向例6中加 registerbgidriver()函數(shù)則變成:

例7:

#includestdio.h

#includegraphics.h

int main()

{

int gdriver=DETECT,gmode;

registerbgidriver(EGAVGA_driver): / *建立獨(dú)立圖形運(yùn)行程序 */

initgraph( gdriver, gmode,"c:\\tc");

bar3d(50,50,250,150,20,1);

getch();

closegraph();

return 0;

}

上例編譯鏈接后產(chǎn)生的執(zhí)行程序可獨(dú)立運(yùn)行。

如不初始化成EGA或CGA分辨率, 而想初始化為CGA分辨率, 則只需要將上述

步驟中有EGAVGA的地方用CGA代替即可。

3.屏幕顏色的設(shè)置和清屏函數(shù)

對于圖形模式的屏幕顏色設(shè)置, 同樣分為背景色的設(shè)置和前景色的設(shè)置。在

Turbo C中分別用下面兩個函數(shù)。

設(shè)置背景色: void far setbkcolor( int color);

設(shè)置作圖色: void far setcolor(int color);

其中color 為圖形方式下顏色的規(guī)定數(shù)值, 對EGA, VGA顯示器適配器, 有關(guān)

顏色的符號常數(shù)及數(shù)值見下表所示。

表3 有關(guān)屏幕顏色的符號常數(shù)表

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

符號常數(shù) 數(shù)值 含義 符號常數(shù) 數(shù)值 含義

———————————————————————————————————

BLACK 0 黑色 DARKGRAY 8 深灰

BLUE 1 蘭色 LIGHTBLUE 9 深蘭

GREEN 2 綠色 LIGHTGREEN 10 淡綠

CYAN 3 青色 LIGHTCYAN 11 淡青

RED 4 紅色 LIGHTRED 12 淡紅

MAGENTA 5 洋紅 LIGHTMAGENTA 13 淡洋紅

BROWN 6 棕色 YELLOW 14 黃色

LIGHTGRAY 7 淡灰 WHITE 15 白色

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

對于CGA適配器, 背景色可以為表3中16種顏色的一種, 但前景色依賴于不同

的調(diào)色板。共有四種調(diào)色板, 每種調(diào)色板上有四種顏色可供選擇。不同調(diào)色板所

對應(yīng)的原色見表4。

表4 CGA調(diào)色板與顏色值表

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

調(diào)色板 顏色值

——————————— ——————————————————

符號常數(shù) 數(shù)值 0 1 2 3

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

C0 0 背景 綠 紅 黃

C1 1 背景 青 洋紅 白

C2 2 背景 淡綠 淡紅 黃

C3 3 背景 淡青 淡洋紅 白

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

清除圖形屏幕內(nèi)容使用清屏函數(shù), 其調(diào)用格式如下:

voide far cleardevice(void);

另外, TURBO C也提供了幾個獲得現(xiàn)行顏色設(shè)置情況的函數(shù)。

int far getbkcolor(void); 返回現(xiàn)行背景顏色值。

int far getcolor(void); 返回現(xiàn)行作圖顏色值。

int far getmaxcolor(void); 返回最高可用的顏色值。

4. 基本圖形函數(shù)

基本圖形函數(shù)包括畫點, 線以及其它一些基本圖形的函數(shù)。本節(jié)對這些函數(shù)

作一全面的介紹。

一、畫點

1. 畫點函數(shù)

void far putpixel(int x, int y, int color);

該函數(shù)表示有指定的象元畫一個按color所確定顏色的點。對于顏色color的

值可從表3中獲得而對x, y是指圖形象元的坐標(biāo)。

在圖形模式下, 是按象元來定義坐標(biāo)的。對VGA適配器, 它的最高分辨率為

640x480, 其中640為整個屏幕從左到右所有象元的個數(shù), 480 為整個屏幕從上到

下所有象元的個數(shù)。屏幕的左上角坐標(biāo)為(0, 0), 右下角坐標(biāo)為(639, 479), 水

平方向從左到右為x軸正向, 垂直方向從上到下為y軸正向。TURBO C 的圖形函數(shù)

都是相對于圖形屏幕坐標(biāo), 即象元來說的。

關(guān)于點的另外一個函數(shù)是:

int far getpixel(int x, int y);

它獲得當(dāng)前點(x, y)的顏色值。

2. 有關(guān)坐標(biāo)位置的函數(shù)

int far getmaxx(void);

返回x軸的最大值。

int far getmaxy(void);

返回y軸的最大值。

int far getx(void);

返回游標(biāo)在x軸的位置。

void far gety(void);

返回游標(biāo)有y軸的位置。

void far moveto(int x, int y);

移動游標(biāo)到(x, y)點, 不是畫點, 在移動過程中亦畫點。

void far moverel(int dx, int dy);

移動游標(biāo)從現(xiàn)行位置(x, y)移動到(x+dx, y+dy)的位置, 移動過程中不畫點。

二、畫線

1. 畫線函數(shù)

TURBO C提供了一系列畫線函數(shù), 下面分別敘述:

void far line(int x0, int y0, int x1, int y1);

畫一條從點(x0, y0)到(x1, y1)的直線。

void far lineto(int x, int y);

畫一作從現(xiàn)行游標(biāo)到點(x, y)的直線。

void far linerel(int dx, int dy);

畫一條從現(xiàn)行游標(biāo)(x, y)到按相對增量確定的點(x+dx, y+dy)的直線。

void far circle(int x, int y, int radius);

以(x, y)為圓心, radius為半徑, 畫一個圓。

void far arc(int x, int y, int stangle, int endangle, int radius);

以(x, y)為圓心, radius為半徑, 從stangle開始到endangle結(jié)束(用度表示)

畫一段圓弧線。在TURBO C中規(guī)定x軸正向為0度, 逆時針方向旋轉(zhuǎn)一周, 依次為

90, 180, 270和360度(其它有關(guān)函數(shù)也按此規(guī)定, 不再重述)。

void ellipse(int x, int y, int stangle, int endangle, int xradius,

int yradius);

以(x, y)為中心, xradius, yradius為x軸和y軸半徑, 從角stangle 開始到

endangle結(jié)束畫一段橢圓線, 當(dāng)stangle=0, endangle=360時, 畫出一個完整的

橢圓。

void far rectangle(int x1, int y1, int x2, inty2);

以(x1, y1)為左上角, (x2, y2)為右下角畫一個矩形框。

void far drawpoly(int numpoints, int far *polypoints);

畫一個頂點數(shù)為numpoints, 各頂點坐標(biāo)由polypoints 給出的多邊形。

polypoints整型數(shù)組必須至少有2倍頂點數(shù)個無素。每一個頂點的坐標(biāo)都定義為x,

y, 并且x在前。值得注意的是當(dāng)畫一個封閉的多邊形時, numpoints 的值取實際

多邊形的頂點數(shù)加一, 并且數(shù)組polypoints中第一個和最后一個點的坐標(biāo)相同。

下面舉一個用drawpoly()函數(shù)畫箭頭的例子。

例9:

#includestdlib.h

#includegraphics.h

int main()

{

int gdriver, gmode, i;

int arw[16]={200, 102, 300, 102, 300, 107, 330,

100, 300, 93, 300, 98, 200, 98, 200, 102};

gdriver=DETECT;

registerbgidriver(EGAVGA_driver);

initgraph(gdriver, gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(12); /*設(shè)置作圖顏色*/

drawpoly(8, arw); /*畫一箭頭*/

getch();

closegraph();

return 0;

}

2. 設(shè)定線型函數(shù)

在沒有對線的特性進(jìn)行設(shè)定之前, TURBO C用其默認(rèn)值, 即一點寬的實線,

但TURBO C也提供了可以改變線型的函數(shù)。線型包括:寬度和形狀。其中寬度只有

兩種選擇: 一點寬和三點寬。而線的形狀則有五種。下面介紹有關(guān)線型的設(shè)置函

數(shù)。

void far setlinestyle(int linestyle, unsigned upattern, int

thickness);

該函數(shù)用來設(shè)置線的有關(guān)信息, 其中l(wèi)inestyle是線形狀的規(guī)定, 見表5。

表5. 有關(guān)線的形狀(linestyle)

━━━━━━━━━━━━━━━━━━━━━━━━━

符號常數(shù) 數(shù)值 含義

—————————————————————————

SOLID_LINE 0 實線

DOTTED_LINE 1 點線

CENTER_LINE 2 中心線

DASHED_LINE 3 點畫線

USERBIT_LINE 4 用戶定義線

━━━━━━━━━━━━━━━━━━━━━━━━━

thickness是線的寬度, 見表6。

表6. 有關(guān)線寬(thickness)

━━━━━━━━━━━━━━━━━━━━━━━━━

符號常數(shù) 數(shù)值 含義

—————————————————————————

NORM_WIDTH 1 一點寬

THIC_WIDTH 3 三點寬

━━━━━━━━━━━━━━━━━━━━━━━━━

對于upattern, 只有l(wèi)inestyle選USERBIT_LINE 時才有意義( 選其它線型,

uppattern取0即可)。此進(jìn)uppattern的16位二進(jìn)制數(shù)的每一位代表一個象元, 如

果那位為1, 則該象元打開, 否則該象元關(guān)閉。

void far getlinesettings(struct linesettingstype far *lineinfo);

該函數(shù)將有關(guān)線的信息存放到由lineinfo 指向的結(jié)構(gòu)中, 表中

linesettingstype的結(jié)構(gòu)如下:

struct linesettingstype{

int linestyle;

unsigned upattern;

int thickness;

}

例如下面兩句程序可以讀出當(dāng)前線的特性

struct linesettingstype *info;

getlinesettings(info);

void far setwritemode(int mode);

該函數(shù)規(guī)定畫線的方式。如果mode=0, 則表示畫線時將所畫位置的原來信息

覆蓋了(這是TURBO C的默認(rèn)方式)。如果mode=1, 則表示畫線時用現(xiàn)在特性的線

與所畫之處原有的線進(jìn)行異或(XOR)操作, 實際上畫出的線是原有線與現(xiàn)在規(guī)定

的線進(jìn)行異或后的結(jié)果。因此, 當(dāng)線的特性不變, 進(jìn)行兩次畫線操作相當(dāng)于沒有

畫線。

有關(guān)線型設(shè)定和畫線函數(shù)的例子如下所示。

例10.

#includestdlib.h

#includegraphics.h

int main()

{

int gdriver, gmode, i;

gdriver=DETECT;

registerbgidriver(EGAVGA_driver);

initgraph(gdriver, gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(GREEN);

circle(320, 240, 98);

setlinestyle(0, 0, 3); /*設(shè)置三點寬實線*/

setcolor(2);

rectangle(220, 140, 420, 340);

setcolor(WHITE);

setlinestyle(4, 0xaaaa, 1); /*設(shè)置一點寬用戶定義線*/

line(220, 240, 420, 240);

line(320, 140, 320, 340);

getch();

closegraph();

return 0;

}

5. 封閉圖形的填充

填充就是用規(guī)定的顏色和圖模填滿一個封閉圖形。

一、先畫輪廓再填充

TURBO C提供了一些先畫出基本圖形輪廓, 再按規(guī)定圖模和顏色填充整個封

閉圖形的函數(shù)。在沒有改變填充方式時, TURBO C以默認(rèn)方式填充。 下面介紹這

些函數(shù)。

void far bar(int x1, int y1, int x2, int y2);

確定一個以(x1, y1)為左上角, (x2, y2)為右下角的矩形窗口, 再按規(guī)定圖

模和顏色填充。

說明: 此函數(shù)不畫出邊框, 所以填充色為邊框。

void far bar3d(int x1, int y1, int x2, int y2, int depth, int

topflag);

當(dāng)topflag為非0時, 畫出一個三維的長方體。當(dāng)topflag為0時, 三維圖形不

封頂, 實際上很少這樣使用。

說明: bar3d()函數(shù)中, 長方體第三維的方向不隨任何參數(shù)而變, 即始終為

45度的方向。

void far pieslice(int x, int y, int stangle, int endangle, int

radius);

畫一個以(x, y)為圓心, radius為半徑, stangle為起始角度, endangle 為

終止角度的扇形, 再按規(guī)定方式填充。當(dāng)stangle=0, endangle=360 時變成一個

實心圓, 并在圓內(nèi)從圓點沿X軸正向畫一條半徑。

void far sector(int x, int y, int stanle, intendangle, int

xradius, int yradius);

畫一個以(x, y)為圓心分別以xradius, yradius為x軸和y軸半徑, stangle

為起始角, endangle為終止角的橢圓扇形, 再按規(guī)定方式填充。

二、設(shè)定填充方式

TURBO C有四個與填充方式有關(guān)的函數(shù)。下面分別介紹:

void far setfillstyle(int pattern, int color);

color的值是當(dāng)前屏幕圖形模式時顏色的有效值。pattern的值及與其等價的

符號常數(shù) 除USER_FILL(用戶定義填充式樣)以外, 其它填充式樣均可由setfillstyle()

函數(shù)設(shè)置。當(dāng)選用USER_FILL時, 該函數(shù)對填充圖模和顏色不作任何改變。 之所

以定義USER_FILL主要因為在獲得有關(guān)填充信息時用到此項。

void far setfillpattern(char * upattern,int color);

設(shè)置用戶定義的填充圖模的顏色以供對封閉圖形填充。

其中upattern是一個指向8個字節(jié)的指針。這8個字節(jié)定義了8x8點陣的圖形。

每個字節(jié)的8位二進(jìn)制數(shù)表示水平8點, 8個字節(jié)表示8行, 然后以此為模型向個封

閉區(qū)域填充。

void far getfillpattern(char * upattern);

該函數(shù)將用戶定義的填充圖模存入upattern指針指向的內(nèi)存區(qū)域。

void far getfillsetings(struct fillsettingstype far * fillinfo);

獲得現(xiàn)行圖模的顏色并將存入結(jié)構(gòu)指針變量fillinfo中。其中fillsettingstype

結(jié)構(gòu)定義如下:

struct fillsettingstype{

int pattern; /* 現(xiàn)行填充模式 * /

int color; /* 現(xiàn)行填充模式 * /

};

三、任意封閉圖形的填充

截止目前為止, 我們只能對一些特定形狀的封閉圖形進(jìn)行填充, 但還不能對

任意封閉圖形進(jìn)行填充。為此, TURBO C 提供了一個可對任意封閉圖形填充的函

數(shù), 其調(diào)用格式如下:

void far floodfill(int x, int y, int border);

其中: x, y為封閉圖形內(nèi)的任意一點。border為邊界的顏色, 也就是封閉圖

形輪廓的顏色。調(diào)用了該函數(shù)后, 將用規(guī)定的顏色和圖模填滿整個封閉圖形。例12:

#includestdlib.h

#includegraphics.h

main()

{

int gdriver, gmode;

strct fillsettingstype save;

gdriver=DETECT;

initgraph(gdriver, gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(LIGHTRED);

setlinestyle(0,0,3);

setfillstyle(1,14); /*設(shè)置填充方式*/

bar3d(100,200,400,350,200,1); /*畫長方體并填充*/

floodfill(450,300,LIGHTRED); /*填充長方體另外兩個面*/

floodfill(250,150, LIGHTRED);

rectanle(450,400,500,450); /*畫一矩形*/

floodfill(470,420, LIGHTRED); /*填充矩形*/

getch();

closegraph();

}

6. 有關(guān)圖形窗口和圖形屏幕操作函數(shù)

一、圖形窗口操作

象文本方式下可以設(shè)定屏幕窗口一樣, 圖形方式下也可以在屏幕上某一區(qū)域

設(shè)定窗口, 只是設(shè)定的為圖形窗口而已, 其后的有關(guān)圖形操作都將以這個窗口的

左上角(0,0)作為坐標(biāo)原點, 而且可為通過設(shè)置使窗口之外的區(qū)域為不可接觸。

這樣, 所有的圖形操作就被限定在窗口內(nèi)進(jìn)行。

void far setviewport(int xl,int yl,int x2, int y2,int clipflag);

設(shè)定一個以(xl,yl)象元點為左上角, (x2,y2)象元為右下角的圖形窗口, 其

中x1,y1,x2,y2是相對于整個屏幕的坐標(biāo)。若clipflag為非0, 則設(shè)定的圖形以外

部分不可接觸, 若clipflag為0, 則圖形窗口以外可以接觸。

void far clearviewport(void);

清除現(xiàn)行圖形窗口的內(nèi)容。

void far getviewsettings(struct viewporttype far * viewport);

獲得關(guān)于現(xiàn)行窗口的信息,并將其存于viewporttype定義的結(jié)構(gòu)變量viewport

中, 其中viewporttype的結(jié)構(gòu)說明如下:

struct viewporttype{

int left, top, right, bottom;

int cliplag;

};

二、屏幕操作

除了清屏函數(shù)以外, 關(guān)于屏幕操作還有以下函數(shù):

void far setactivepage(int pagenum);

void far setvisualpage(int pagenum);

這兩個函數(shù)只用于EGA,VGA 以及HERCULES圖形適配器。setctivepage() 函數(shù)

是為圖形輸出選擇激活頁。 所謂激活頁是指后續(xù)圖形的輸出被寫到函數(shù)選定的

pagenum頁面, 該頁面并不一定可見。setvisualpage()函數(shù)才使pagenum 所指定

的頁面變成可見頁。頁面從0開始(Turbo C默認(rèn)頁)。如果先用setactivepage()

函數(shù)在不同頁面上畫出一幅幅圖像,再用setvisualpage()函數(shù)交替顯示, 就可以

實現(xiàn)一些動畫的效果。

void far getimage(int xl,int yl, int x2,int y2, void far *mapbuf);

void far putimge(int x,int,y,void * mapbuf, int op);

unsined far imagesize(int xl,int yl,int x2,int y2);

這三個函數(shù)用于將屏幕上的圖像復(fù)制到內(nèi)存,然后再將內(nèi)存中的圖像送回到

屏幕上。首先通過函數(shù)imagesize()測試要保存左上角為(xl,yl), 右上角為(x2,

y2)的圖形屏幕區(qū)域內(nèi)的全部內(nèi)容需多少個字節(jié), 然后再給mapbuf 分配一個所測

數(shù)字節(jié)內(nèi)存空間的指針。通過調(diào)用getimage()函數(shù)就可將該區(qū)域內(nèi)的圖像保存在

內(nèi)存中, 需要時可用putimage()函數(shù)將該圖像輸出到左上角為點(x, y)的位置上,

其中g(shù)etimage()函數(shù)中的參數(shù)op規(guī)定如何釋放內(nèi)存中圖像。

對于imagesize()函數(shù), 只能返回字節(jié)數(shù)小于64K字節(jié)的圖像區(qū)域, 否則將會

出錯, 出錯時返回-1。

本節(jié)介紹的函數(shù)在圖像動畫處理、菜單設(shè)計技巧中非常有用。

例13: 下面程序模擬兩個小球動態(tài)碰撞過程。

7. 圖形模式下的文本輸出

在圖形模式下, 只能用標(biāo)準(zhǔn)輸出函數(shù), 如printf(), puts(), putchar() 函

數(shù)輸出文本到屏幕。除此之外, 其它輸出函數(shù)(如窗口輸出函數(shù))不能使用, 即是

可以輸出的標(biāo)準(zhǔn)函數(shù), 也只以前景色為白色, 按80列, 25行的文本方式輸出。

Turbo C2.0也提供了一些專門用于在圖形顯示模式下的文本輸出函數(shù)。下面

將分別進(jìn)行介紹。

一、文本輸出函數(shù)

void far outtext(char far *textstring);

該函數(shù)輸出字符串指針textstring所指的文本在現(xiàn)行位置。

void far outtextxy(int x, int y, char far *textstring);

該函數(shù)輸出字符串指針textstring所指的文本在規(guī)定的(x, y)位置。 其中x

和y為象元坐標(biāo)。

說明:

這兩個函數(shù)都是輸出字符串, 但經(jīng)常會遇到輸出數(shù)值或其它類型的數(shù)據(jù),

此時就必須使用格式化輸出函數(shù)sprintf()。

sprintf()函數(shù)的調(diào)用格式為:

int sprintf(char *str, char *format, variable-list);

它與printf()函數(shù)不同之處是將按格式化規(guī)定的內(nèi)容寫入str 指向的字符串

中, 返回值等于寫入的字符個數(shù)。

例如:

sprintf(s, "your TOEFL score is %d", mark);

這里s應(yīng)是字符串指針或數(shù)組, mark為整型變量。

c語言的圖形函數(shù)庫有哪些

圖形和圖像函數(shù)包含在graphics.h里面(一) 像素函數(shù)56. putpiel() 畫像素點函數(shù)57. getpixel()返回像素色函數(shù)(二) 直線和線型函數(shù)58. line() 畫線函數(shù)59. lineto() 畫線函數(shù)60. linerel() 相對畫線函數(shù)61. setlinestyle() 設(shè)置線型函數(shù)62. getlinesettings() 獲取線型設(shè)置函數(shù)63. setwritemode() 設(shè)置畫線模式函數(shù)(三)、多邊形函數(shù)64. rectangle() 畫矩形函數(shù)65. bar() 畫條函數(shù)66. bar3d() 畫條塊函數(shù)67. drawpoly() 畫多邊形函數(shù)(四)、 圓、弧和曲線函數(shù)68. getaspectratio()獲取縱橫比函數(shù)69. circle()畫圓函數(shù)70. arc() 畫圓弧函數(shù)71. ellipse()畫橢圓弧函數(shù)72. fillellipse() 畫橢圓區(qū)函數(shù)73. pieslice() 畫扇區(qū)函數(shù)74. sector() 畫橢圓扇區(qū)函數(shù)75. getarccoords()獲取圓弧坐標(biāo)函數(shù)(五)、 填充函數(shù)76. setfillstyle() 設(shè)置填充圖樣和顏色函數(shù)77. setfillpattern() 設(shè)置用戶圖樣函數(shù)78. floodfill() 填充閉域函數(shù)79. fillpoly() 填充多邊形函數(shù)80. getfillsettings() 獲取填充設(shè)置函數(shù)81. getfillpattern() 獲取用戶圖樣設(shè)置函數(shù)(六)、圖像函數(shù)82. imagesize() 圖像存儲大小函數(shù)83. getimage() 保存圖像函數(shù)84. putimage() 輸出圖像函數(shù)四、圖形和圖像函數(shù)對許多圖形應(yīng)用程序,直線和曲線是非常有用的。但對有些圖形只能靠操作單個像素才能畫出。當(dāng)然如果沒有畫像素的功能,就無法操作直線和曲線的函數(shù)。而且通過大規(guī)模使用像素功能,整個圖形就可以保存、寫、擦除和與屏幕上的原有圖形進(jìn)行疊加。(一) 像素函數(shù)56. putpixel() 畫像素點函數(shù)功能: 函數(shù)putpixel() 在圖形模式下屏幕上畫一個像素點。用法: 函數(shù)調(diào)用方式為void putpixel(int x,int y,int color);說明: 參數(shù)x,y為像素點的坐標(biāo),color是該像素點的顏色,它可以是顏色符號名,也可以是整型色彩值。此函數(shù)相應(yīng)的頭文件是graphics.h返回值: 無例: 在屏幕上(6,8)處畫一個紅色像素點:putpixel(6,8,RED);57. getpixel()返回像素色函數(shù)功能: 函數(shù)getpixel()返回像素點顏色值。用法: 該函數(shù)調(diào)用方式為int getpixel(int x,int y);說明: 參數(shù)x,y為像素點坐標(biāo)。函數(shù)的返回值可以不反映實際彩色值,這取決于調(diào)色板的設(shè)置情況(參見setpalette()函數(shù))。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值: 返回一個像素點色彩值。例: 把屏幕上(8,6)點的像素顏色值賦給變量color。color=getpixel(8,6);

C語言中的圖形函數(shù)有哪些

一) 像素函數(shù)

putpiel() 畫像素點函數(shù)

getpixel()返回像素色函數(shù)

(二) 直線和線型函數(shù)

line() 畫線函數(shù)

lineto() 畫線函數(shù)

linerel() 相對畫線函數(shù)

setlinestyle() 設(shè)置線型函數(shù)

getlinesettings() 獲取線型設(shè)置函數(shù)

setwritemode() 設(shè)置畫線模式函數(shù)

(三)、多邊形函數(shù)

rectangle() 畫矩形函數(shù)

bar() 畫條函數(shù)

bar3d() 畫條塊函數(shù)

drawpoly() 畫多邊形函數(shù)

(四)、 圓、弧和曲線函數(shù)

getaspectratio()獲取縱橫比函數(shù)

circle()畫圓函數(shù)

arc() 畫圓弧函數(shù)

ellipse()畫橢圓弧函數(shù)

fillellipse() 畫橢圓區(qū)函數(shù)

pieslice() 畫扇區(qū)函數(shù)

sector() 畫橢圓扇區(qū)函數(shù)

getarccoords()獲取圓弧坐標(biāo)函數(shù)

(五)、 填充函數(shù)

setfillstyle() 設(shè)置填充圖樣和顏色函數(shù)

setfillpattern() 設(shè)置用戶圖樣函數(shù)

floodfill() 填充閉域函數(shù)

fillpoly() 填充多邊形函數(shù)

getfillsettings() 獲取填充設(shè)置函數(shù)

getfillpattern() 獲取用戶圖樣設(shè)置函數(shù)

(六)、圖像函數(shù)

imagesize() 圖像存儲大小函數(shù)

getimage() 保存圖像函數(shù)

putimage() 輸出圖像函數(shù)

能列舉些C語言中比較常見重要庫函數(shù)的用法嗎?

我的建議是去看MSDN,里面有詳細(xì)的庫函數(shù)的說明和使用方法。C的庫函數(shù)有很多,一條條說不現(xiàn)實,就是一個專業(yè)的程序員也不可能將庫函數(shù)都記下來。我從網(wǎng)上搜了點庫函數(shù)的用法,你看看吧。還是那句話,想了解庫函數(shù),還是看MSDN。

下面也是我從網(wǎng)上找到的。網(wǎng)上這種東西很多。但我認(rèn)為要是真正精通,還是MSDN

文件的打開(fopen函數(shù))

fopen函數(shù)用來打開一個文件,其調(diào)用的一般形式為:

文件指針名=fopen(文件名,使用文件方式);

其中,

“文件指針名”必須是被說明為FILE 類型的指針變量;

“文件名”是被打開文件的文件名;

“使用文件方式”是指文件的類型和操作要求。

“文件名”是字符串常量或字符串?dāng)?shù)組。

例如:

FILE *fp;

fp=("file a","r");

其意義是在當(dāng)前目錄下打開文件file a,只允許進(jìn)行“讀”操作,并使fp指向該文件。

又如:

FILE *fphzk

fphzk=("c:\\hzk16","rb")

其意義是打開C驅(qū)動器磁盤的根目錄下的文件hzk16,這是一個二進(jìn)制文件,只允許按二進(jìn)制方式進(jìn)行讀操作。兩個反斜線“\\ ”中的第一個表示轉(zhuǎn)義字符,第二個表示根目錄。

使用文件的方式共有12種,下面給出了它們的符號和意義。

文件使用方式

意義

“rt”

只讀打開一個文本文件,只允許讀數(shù)據(jù)

“wt”

只寫打開或建立一個文本文件,只允許寫數(shù)據(jù)

“at”

追加打開一個文本文件,并在文件末尾寫數(shù)據(jù)

“rb”

只讀打開一個二進(jìn)制文件,只允許讀數(shù)據(jù)

“wb”

只寫打開或建立一個二進(jìn)制文件,只允許寫數(shù)據(jù)

“ab”

追加打開一個二進(jìn)制文件,并在文件末尾寫數(shù)據(jù)

“rt+”

讀寫打開一個文本文件,允許讀和寫

“wt+”

讀寫打開或建立一個文本文件,允許讀寫

“at+”

讀寫打開一個文本文件,允許讀,或在文件末追加數(shù)據(jù)

“rb+”

讀寫打開一個二進(jìn)制文件,允許讀和寫

“wb+”

讀寫打開或建立一個二進(jìn)制文件,允許讀和寫

“ab+”

讀寫打開一個二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù)

對于文件使用方式有以下幾點說明:

1) 文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是:

r(read): 讀

w(write): 寫

a(append): 追加

t(text): 文本文件,可省略不寫

b(banary): 二進(jìn)制文件

+: 讀和寫

2) 凡用“r”打開一個文件時,該文件必須已經(jīng)存在,且只能從該文件讀出。

3) 用“w”打開的文件只能向該文件寫入。若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個新文件。

4) 若要向一個已存在的文件追加新的信息,只能用“a”方式打開文件。但此時該文件必須是存在的,否則將會出錯。

5) 在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應(yīng)的處理。因此常用以下程序段打開文件:

6) if((fp=fopen("c:\\hzk16","rb")==NULL)

{

printf("\nerror on open c:\\hzk16 file!");

getch();

exit(1);

}

這段程序的意義是,如果返回的指針為空,表示不能打開C盤根目錄下的hzk16文件,則給出提示信息“error on open c:\ hzk16 file!”,下一行g(shù)etch()的功能是從鍵盤輸入一個字符,但不在屏幕上顯示。在這里,該行的作用是等待,只有當(dāng)用戶從鍵盤敲任一鍵時,程序才繼續(xù)執(zhí)行,因此用戶可利用這個等待時間閱讀出錯提示。敲鍵后執(zhí)行exit(1)退出程序。

7) 把一個文本文件讀入內(nèi)存時,要將ASCII碼轉(zhuǎn)換成二進(jìn)制碼,而把文件以文本方式寫入磁盤時,也要把二進(jìn)制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫要花費(fèi)較多的轉(zhuǎn)換時間。對二進(jìn)制文件的讀寫不存在這種轉(zhuǎn)換。

8) 標(biāo)準(zhǔn)輸入文件(鍵盤),標(biāo)準(zhǔn)輸出文件(顯示器),標(biāo)準(zhǔn)出錯輸出(出錯信息)是由系統(tǒng)打開的,可直接使用。

13.3.2 文件關(guān)閉函數(shù)(fclose函數(shù))

文件一旦使用完畢,應(yīng)用關(guān)閉文件函數(shù)把文件關(guān)閉,以避免文件的數(shù)據(jù)丟失等錯誤。

fclose函數(shù)調(diào)用的一般形式是:

fclose(文件指針);

例如:

fclose(fp);

正常完成關(guān)閉文件操作時,fclose函數(shù)返回值為0。如返回非零值則表示有錯誤發(fā)生。

13.4 文件的讀寫

對文件的讀和寫是最常用的文件操作。在C語言中提供了多種文件讀寫的函數(shù):

·字符讀寫函數(shù) :fgetc和fputc

·字符串讀寫函數(shù):fgets和fputs

·數(shù)據(jù)塊讀寫函數(shù):freed和fwrite

·格式化讀寫函數(shù):fscanf和fprinf

下面分別予以介紹。使用以上函數(shù)都要求包含頭文件stdio.h。

13.4.1 字符讀寫函數(shù)fgetc和fputc

字符讀寫函數(shù)是以字符(字節(jié))為單位的讀寫函數(shù)。每次可從文件讀出或向文件寫入一個字符。

1. 讀字符函數(shù)fgetc

fgetc函數(shù)的功能是從指定的文件中讀一個字符,函數(shù)調(diào)用的形式為:

字符變量=fgetc(文件指針);

例如:

ch=fgetc(fp);

其意義是從打開的文件fp中讀取一個字符并送入ch中。

對于fgetc函數(shù)的使用有以下幾點說明:

1) 在fgetc函數(shù)調(diào)用中,讀取的文件必須是以讀或讀寫方式打開的。

2) 讀取字符的結(jié)果也可以不向字符變量賦值,

例如:

fgetc(fp);

但是讀出的字符不能保存。

3) 在文件內(nèi)部有一個位置指針。用來指向文件的當(dāng)前讀寫字節(jié)。在文件打開時,該指針總是指向文件的第一個字節(jié)。使用fgetc 函數(shù)后,該位置指針將向后移動一個字節(jié)。 因此可連續(xù)多次使用fgetc函數(shù),讀取多個字符。應(yīng)注意文件指針和文件內(nèi)部的位置指針不是一回事。文件指針是指向整個文件的,須在程序中定義說明,只要不重新賦值,文件指針的值是不變的。文件內(nèi)部的位置指針用以指示文件內(nèi)部的當(dāng)前讀寫位置,每讀寫一次,該指針均向后移動,它不需在程序中定義說明,而是由系統(tǒng)自動設(shè)置的。

【例13.1】讀入文件c1.doc,在屏幕上輸出。

#includestdio.h

main()

{

FILE *fp;

char ch;

if((fp=fopen("d:\\jrzh\\example\\c1.txt","rt"))==NULL)

{

printf("\nCannot open file strike any key exit!");

getch();

exit(1);

}

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

fclose(fp);

}

本例程序的功能是從文件中逐個讀取字符,在屏幕上顯示。程序定義了文件指針fp,以讀文本文件方式打開文件“d:\\jrzh\\example\\ex1_1.c”,并使fp指向該文件。如打開文件出錯,給出提示并退出程序。程序第12行先讀出一個字符,然后進(jìn)入循環(huán),只要讀出的字符不是文件結(jié)束標(biāo)志(每個文件末有一結(jié)束標(biāo)志EOF)就把該字符顯示在屏幕上,再讀入下一字符。每讀一次,文件內(nèi)部的位置指針向后移動一個字符,文件結(jié)束時,該指針指向EOF。執(zhí)行本程序?qū)@示整個文件。

2. 寫字符函數(shù)fputc

fputc函數(shù)的功能是把一個字符寫入指定的文件中,函數(shù)調(diào)用的形式為:

fputc(字符量,文件指針);

其中,待寫入的字符量可以是字符常量或變量,例如:

fputc('a',fp);

其意義是把字符a寫入fp所指向的文件中。

對于fputc函數(shù)的使用也要說明幾點:

1) 被寫入的文件可以用寫、讀寫、追加方式打開,用寫或讀寫方式打開一個已存在的文件時將清除原有的文件內(nèi)容,寫入字符從文件首開始。如需保留原有文件內(nèi)容,希望寫入的字符以文件末開始存放,必須以追加方式打開文件。被寫入的文件若不存在,則創(chuàng)建該文件。

2) 每寫入一個字符,文件內(nèi)部位置指針向后移動一個字節(jié)。

3) fputc函數(shù)有一個返回值,如寫入成功則返回寫入的字符,否則返回一個EOF??捎么藖砼袛鄬懭胧欠癯晒?。

【例13.2】從鍵盤輸入一行字符,寫入一個文件,再把該文件內(nèi)容讀出顯示在屏幕上。

#includestdio.h

main()

{

FILE *fp;

char ch;

if((fp=fopen("d:\\jrzh\\example\\string","wt+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf("input a string:\n");

ch=getchar();

while (ch!='\n')

{

fputc(ch,fp);

ch=getchar();

}

rewind(fp);

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

printf("\n");

fclose(fp);

}

程序中第6行以讀寫文本文件方式打開文件string。程序第13行從鍵盤讀入一個字符后進(jìn)入循環(huán),當(dāng)讀入字符不為回車符時,則把該字符寫入文件之中,然后繼續(xù)從鍵盤讀入下一字符。每輸入一個字符,文件內(nèi)部位置指針向后移動一個字節(jié)。寫入完畢,該指針已指向文件末。如要把文件從頭讀出,須把指針移向文件頭,程序第19行rewind函數(shù)用于把fp所指文件的內(nèi)部位置指針移到文件頭。第20至25行用于讀出文件中的一行內(nèi)容。

【例13.3】把命令行參數(shù)中的前一個文件名標(biāo)識的文件,復(fù)制到后一個文件名標(biāo)識的文件中,如命令行中只有一個文件名則把該文件寫到標(biāo)準(zhǔn)輸出文件(顯示器)中。

#includestdio.h

main(int argc,char *argv[])

{

FILE *fp1,*fp2;

char ch;

if(argc==1)

{

printf("have not enter file name strike any key exit");

getch();

exit(0);

}

if((fp1=fopen(argv[1],"rt"))==NULL)

{

printf("Cannot open %s\n",argv[1]);

getch();

exit(1);

}

if(argc==2) fp2=stdout;

else if((fp2=fopen(argv[2],"wt+"))==NULL)

{

printf("Cannot open %s\n",argv[1]);

getch();

exit(1);

}

while((ch=fgetc(fp1))!=EOF)

fputc(ch,fp2);

fclose(fp1);

fclose(fp2);

}

本程序為帶參的main函數(shù)。程序中定義了兩個文件指針fp1和fp2,分別指向命令行參數(shù)中給出的文件。如命令行參數(shù)中沒有給出文件名,則給出提示信息。程序第18行表示如果只給出一個文件名,則使fp2指向標(biāo)準(zhǔn)輸出文件(即顯示器)。程序第25行至28行用循環(huán)語句逐個讀出文件1中的字符再送到文件2中。再次運(yùn)行時,給出了一個文件名,故輸出給標(biāo)準(zhǔn)輸出文件stdout,即在顯示器上顯示文件內(nèi)容。第三次運(yùn)行,給出了二個文件名,因此把string中的內(nèi)容讀出,寫入到OK之中??捎肈OS命令type顯示OK的內(nèi)容。

13.4.2 字符串讀寫函數(shù)fgets和fputs

1. 讀字符串函數(shù)fgets

函數(shù)的功能是從指定的文件中讀一個字符串到字符數(shù)組中,函數(shù)調(diào)用的形式為:

fgets(字符數(shù)組名,n,文件指針);

其中的n是一個正整數(shù)。表示從文件中讀出的字符串不超過 n-1個字符。在讀入的最后一個字符后加上串結(jié)束標(biāo)志'\0'。

例如:

fgets(str,n,fp);

的意義是從fp所指的文件中讀出n-1個字符送入字符數(shù)組str中。

【例13.4】從string文件中讀入一個含10個字符的字符串。

#includestdio.h

main()

{

FILE *fp;

char str[11];

if((fp=fopen("d:\\jrzh\\example\\string","rt"))==NULL)

{

printf("\nCannot open file strike any key exit!");

getch();

exit(1);

}

fgets(str,11,fp);

printf("\n%s\n",str);

fclose(fp);

}

本例定義了一個字符數(shù)組str共11個字節(jié),在以讀文本文件方式打開文件string后,從中讀出10個字符送入str數(shù)組,在數(shù)組最后一個單元內(nèi)將加上'\0',然后在屏幕上顯示輸出str數(shù)組。輸出的十個字符正是例13.1程序的前十個字符。

對fgets函數(shù)有兩點說明:

1) 在讀出n-1個字符之前,如遇到了換行符或EOF,則讀出結(jié)束。

2) fgets函數(shù)也有返回值,其返回值是字符數(shù)組的首地址。

2. 寫字符串函數(shù)fputs

fputs函數(shù)的功能是向指定的文件寫入一個字符串,其調(diào)用形式為:

fputs(字符串,文件指針);

其中字符串可以是字符串常量,也可以是字符數(shù)組名,或指針變量,例如:

fputs(“abcd“,fp);

其意義是把字符串“abcd”寫入fp所指的文件之中。

【例13.5】在例13.2中建立的文件string中追加一個字符串。

#includestdio.h

main()

{

FILE *fp;

char ch,st[20];

if((fp=fopen("string","at+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf("input a string:\n");

scanf("%s",st);

fputs(st,fp);

rewind(fp);

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

printf("\n");

fclose(fp);

}

本例要求在string文件末加寫字符串,因此,在程序第6行以追加讀寫文本文件的方式打開文件string。然后輸入字符串,并用fputs函數(shù)把該串寫入文件string。在程序15行用rewind函數(shù)把文件內(nèi)部位置指針移到文件首。再進(jìn)入循環(huán)逐個顯示當(dāng)前文件中的全部內(nèi)容。

13.4.3 數(shù)據(jù)塊讀寫函數(shù)fread和fwtrite

C語言還提供了用于整塊數(shù)據(jù)的讀寫函數(shù)。可用來讀寫一組數(shù)據(jù),如一個數(shù)組元素,一個結(jié)構(gòu)變量的值等。

讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:

fread(buffer,size,count,fp);

寫數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:

fwrite(buffer,size,count,fp);

其中:

buffer 是一個指針,在fread函數(shù)中,它表示存放輸入數(shù)據(jù)的首地址。在fwrite函數(shù)中,它表示存放輸出數(shù)據(jù)的首地址。

size 表示數(shù)據(jù)塊的字節(jié)數(shù)。

count 表示要讀寫的數(shù)據(jù)塊塊數(shù)。

fp 表示文件指針。

例如:

fread(fa,4,5,fp);

其意義是從fp所指的文件中,每次讀4個字節(jié)(一個實數(shù))送入實數(shù)組fa中,連續(xù)讀5次,即讀5個實數(shù)到fa中。

【例13.6】從鍵盤輸入兩個學(xué)生數(shù)據(jù),寫入一個文件中,再讀出這兩個學(xué)生的數(shù)據(jù)顯示在屏幕上。

#includestdio.h

struct stu

{

char name[10];

int num;

int age;

char addr[15];

}boya[2],boyb[2],*pp,*qq;

main()

{

FILE *fp;

char ch;

int i;

pp=boya;

qq=boyb;

if((fp=fopen("d:\\jrzh\\example\\stu_list","wb+"))==NULL)

{

printf("Cannot open file strike any key exit!");

getch();

exit(1);

}

printf("\ninput data\n");

for(i=0;i2;i++,pp++)

scanf("%s%d%d%s",pp-name,pp-num,pp-age,pp-addr);

pp=boya;

fwrite(pp,sizeof(struct stu),2,fp);

rewind(fp);

fread(qq,sizeof(struct stu),2,fp);

printf("\n\nname\tnumber age addr\n");

for(i=0;i2;i++,qq++)

printf("%s\t%5d%7d %s\n",qq-name,qq-num,qq-age,qq-addr);

fclose(fp);

}

本例程序定義了一個結(jié)構(gòu)stu,說明了兩個結(jié)構(gòu)數(shù)組boya和boyb以及兩個結(jié)構(gòu)指針變量pp和qq。pp指向boya,qq指向boyb。程序第16行以讀寫方式打開二進(jìn)制文件“stu_list”,輸入二個學(xué)生數(shù)據(jù)之后,寫入該文件中,然后把文件內(nèi)部位置指針移到文件首,讀出兩塊學(xué)生數(shù)據(jù)后,在屏幕上顯示。

------

回復(fù)此文章 |

回復(fù)主題:Re:c語言文件操作 | 作者: haohao | 軍銜:六級軍士 | 發(fā)表時間:2004-07-28 11:08:47

下午應(yīng)該把這個搞定了.

------

回復(fù)此文章 |

回復(fù)主題:Re:Re:c語言文件操作 | 作者: haohao | 軍銜:六級軍士 | 發(fā)表時間:2004-07-28 11:10:23

13.7 C庫文件

C系統(tǒng)提供了豐富的系統(tǒng)文件,稱為庫文件,C的庫文件分為兩類,一類是擴(kuò)展名為".h"的文件,稱為頭文件,在前面的包含命令中我們已多次使用過。在".h"文件中包含了常量定義、類型定義、宏定義、函數(shù)原型以及各種編譯選擇設(shè)置等信息。另一類是函數(shù)庫,包括了各種函數(shù)的目標(biāo)代碼,供用戶在程序中調(diào)用。 通常在程序中調(diào)用一個庫函數(shù)時,要在調(diào)用之前包含該函數(shù)原型所在的".h" 文件。

下面給出Turbo C的全部".h"文件。

Turbo C頭文件

n ALLOC.H 說明內(nèi)存管理函數(shù)(分配、釋放等)。

n ASSERT.H 定義 assert調(diào)試宏。

n BIOS.H 說明調(diào)用IBM—PC ROM BIOS子程序的各個函數(shù)。

n CONIO.H 說明調(diào)用DOS控制臺I/O子程序的各個函數(shù)。

n CTYPE.H 包含有關(guān)字符分類及轉(zhuǎn)換的名類信息(如 isalpha和toascii等)。

n DIR.H 包含有關(guān)目錄和路徑的結(jié)構(gòu)、宏定義和函數(shù)。

n DOS.H 定義和說明MSDOS和8086調(diào)用的一些常量和函數(shù)。

n ERRON.H 定義錯誤代碼的助記符。

n FCNTL.H 定義在與open庫子程序連接時的符號常量。

n FLOAT.H 包含有關(guān)浮點運(yùn)算的一些參數(shù)和函數(shù)。

n GRAPHICS.H 說明有關(guān)圖形功能的各個函數(shù),圖形錯誤代碼的常量定義,正對不同驅(qū)動程序的各種顏色值,及函數(shù)用到的一些特殊結(jié)構(gòu)。

n IO.H 包含低級I/O子程序的結(jié)構(gòu)和說明。

n LIMIT.H 包含各環(huán)境參數(shù)、編譯時間限制、數(shù)的范圍等信息。

n MATH.H 說明數(shù)學(xué)運(yùn)算函數(shù),還定了 HUGE VAL 宏, 說明了matherr和matherr子程序用到的特殊結(jié)構(gòu)。

n MEM.H 說明一些內(nèi)存操作函數(shù)(其中大多數(shù)也在STRING.H中說明)。

n PROCESS.H 說明進(jìn)程管理的各個函數(shù),spawn…和EXEC …函數(shù)的結(jié)構(gòu)說明。

n SETJMP.H 定義longjmp和setjmp函數(shù)用到的jmp buf類型,說明這兩個函數(shù)。

n SHARE.H 定義文件共享函數(shù)的參數(shù)。

n SIGNAL.H 定義SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量,說明rajse和signal兩個函數(shù)。

n STDARG.H 定義讀函數(shù)參數(shù)表的宏。(如vprintf,vscarf函數(shù))。

n STDDEF.H 定義一些公共數(shù)據(jù)類型和宏。

n STDIO.H 定義Kernighan和Ritchie在Unix System V 中定義的標(biāo)準(zhǔn)和擴(kuò)展的類型和宏。還定義標(biāo)準(zhǔn)I/O 預(yù)定義流:stdin,stdout和stderr,說明 I/O流子程序。

n STDLIB.H 說明一些常用的子程序:轉(zhuǎn)換子程序、搜索/ 排序子程序等。

n STRING.H 說明一些串操作和內(nèi)存操作函數(shù)。

n SYS\STAT.H 定義在打開和創(chuàng)建文件時用到的一些符號常量。

n SYS\TYPES.H 說明ftime函數(shù)和timeb結(jié)構(gòu)。

n SYS\TIME.H 定義時間的類型time[ZZ(Z] [ZZ)]t。

n TIME.H 定義時間轉(zhuǎn)換子程序asctime、localtime和gmtime的結(jié)構(gòu),ctime、 difftime、 gmtime、 localtime和stime用到的類型,并提供這些函數(shù)的原型。

n VALUE.H 定義一些重要常量,包括依賴于機(jī)器硬件的和為與Unix System V相兼容而說明的一些常量,包括浮點和雙精度值的范圍。

13.8 本章小結(jié)

1. C系統(tǒng)把文件當(dāng)作一個“流”,按字節(jié)進(jìn)行處理。

2. C文件按編碼方式分為二進(jìn)制文件和ASCII文件。

3. C語言中,用文件指針標(biāo)識文件,當(dāng)一個文件被打開時,可取得該文件指針。

4. 文件在讀寫之前必須打開,讀寫結(jié)束必須關(guān)閉。

5. 文件可按只讀、只寫、讀寫、追加四種操作方式打開,同時還必須指定文件的類型是二進(jìn)制文件還是文本文件。

6. 文件可按字節(jié),字符串,數(shù)據(jù)塊為單位讀寫,文件也可按指定的格式進(jìn)行讀寫。

7. 文件內(nèi)部的位置指針可指示當(dāng)前的讀寫位置,移動該指針可以對文件實現(xiàn)隨機(jī)讀寫。

名稱欄目:c語言圖形庫函數(shù)舉例子 如何用c語言圖形庫開發(fā)軟件
當(dāng)前地址:http://muchs.cn/article2/ddceeic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、品牌網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)定制開發(fā)、營銷型網(wǎng)站建設(shè)服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)