< align=center><FONT color=#0000ff size=3><B><FONT color=#cc0000>函数大全(m开头)</FONT></B></FONT></P> ' W$ m; f$ W' R# i< align=left><FONT color=#ff0000>main()主函数 ( ]. s. U' V- p8 [$ _6 e</FONT>每一C 程序都 <B><FONT color=#000000>必须</FONT></B> 有一<FONT color=#ff0000><B>main()</B></FONT>函数, 可以根据自己的爱好把它放在程序的某 8 w: l/ M0 ?$ S$ W$ ^4 \: u
个地方。有些程序员把它放在最前面, 而另一些程序员把它放在最后面, 无论放 ' Y( C, v3 F" e在哪个地方, 以下几点说明都是适合的。 0 H/ S5 }2 R$ x% c! d7 k, U; S; p# I<FONT color=#000099>1. main() 参数 </FONT> * J, x" q7 F: [, \- ~在Turbo C2.0启动过程中, 传递main()函数三个参数: argc, argv和env。 U' F! D$ F* z2 b( f6 P/ A* argc: 整数, 为传给main()的命令行参数个数。 . z+ H- z% j+ G2 s( B- J
* argv: 字符串数组。 4 z$ L" ?: i2 A( O
在DOS 3.X 版本中, argv[0] 为程序运行的全路径名; 对DOS 3.0 # Q& X( v6 }8 d9 v/ _以下的版本, argv[0]为空串("") 。 5 U7 _0 p! @# ]# s( E. m4 g
argv[1] 为在DOS命令行中执行程序名后的第一个字符串; * z! s7 l* D/ _% a/ \5 i- Wargv[2] 为执行程序名后的第二个字符串; ( t* x8 |) S( \- o! L0 q2 y* S
... 5 }& |; V5 p) i4 Hargv[argc]为NULL。 - G6 y( L5 p. X. s, y4 L; @
*env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符 p# E- W+ ]4 t4 g1 A+ A/ Z串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:\DOS, C: % j* m- ]; m" e" R5 `' v5 v, ~2 U" u\TURBOC(对于PATH) 或YES(对于87)。 , z7 o+ ]( B' \4 i, g/ x6 V, [
Turbo C2.0启动时总是把这三个参数传递给main()函数, 可以在用户程序中 3 v' {4 [( _. T" y说明(或不说明)它们, 如果说明了部分(或全部)参数, 它们就成为main()子程序 5 Z; p5 z7 {; I" I1 [# O的局部变量。 & P3 ?2 J" ]# s0 T3 V% ^2 A. _6 a8 o
请注意: 一旦想说明这些参数, 则必须按argc, argv, env 的顺序, 如以下 / p" b2 o1 N1 D. e. C4 E% P/ S
的例子: 3 r# _7 H/ a8 G<FONT color=#0000ff>main() $ f* p; M7 l/ z( k& x8 |+ U
main(int argc) & ]7 A. \& S; F
main(int argc, char *argv[]) 0 S1 A! T: A+ x/ E
main(int argc, char *argv[], char *env[]) </FONT> # }! T) Z+ f* k4 e! i; o E" _5 f其中第二种情况是合法的, 但不常见, 因为在程序中很少有只用argc, 而不 2 f" x* j% o. ], |+ h
用argv[]的情况。 ( |' z3 \: G7 g6 g% W
以下提供一样例程序EXAMPLE.EXE, 演示如何在main()函数中使用三个参数: " h5 m F2 t& g5 c& W1 ?
<FONT color=#0000ff>/*program name EXAMPLE.EXE*/ 2 @2 N9 p8 _7 D$ s; a: B$ r* B#include <STDIO.H> N5 {# l! g/ V
#include <STDLIB.H> 5 x; ]# M; t3 b* Z* u/ Rmain(int argc, char *argv[], char *env[]) 4 x/ f" f+ l1 s2 j7 {
{ & n4 A% X2 l$ Q5 n8 zint i; 3 i j- c/ ?0 ]3 Xprintf("These are the %d command- line arguments passed to + T/ n) U- m' G3 d# ?% Vmain:\n\n", argc); ) k' Y6 Z: C" mfor(i=0; i<=argc; i++) + p% n1 E" R) @! rprintf("argv[%d]:%s\n", i, argv); : N4 u9 b* d! ?+ Aprintf("\nThe environment string(s)on this system are:\n\n"); ( w8 S) V; T, ^% m7 S# i
for(i=0; env!=NULL; i++) 1 R( M' X& Y+ w+ b7 uprintf(" env[%d]:%s\n", i, env); 8 G9 w3 h% L/ D5 h2 ]
} </FONT> $ b* W: E- d7 J0 _$ {; N如果在DOS 提示符下, 按以下方式运行EXAMPLE.EXE: " `3 m! B) x9 h k& Z$ `% L6 h
C:\example first_argument "argument with blanks" 3 4 "last but # r! h U _0 {, F) M+ mone" stop! ; S6 v& n8 r r1 K' k" o, {注意: 可以用双引号括起内含空格的参数, 如本例中的: " argument / \( c. i6 F ?5 A" rwith blanks"和"Last but one")。 , f+ R1 k+ W7 i5 C$ l2 v. \6 E
结果是这样的: 0 t( T0 S b; g<FONT color=#0000ff>The value of argc is 7 . V- s' \6 k$ ~1 d7 g- {9 N
These are the 7 command-linearguments passed to main: 4 v a7 k/ f1 B! t/ i6 b9 \# vargv[0]:C:\TURBO\EXAMPLE.EXE 4 D2 u8 ]6 ~" h1 |0 Uargv[1]:first_argument 9 C. W- g- x1 Wargv[2]:argument with blanks 1 t& T; J8 w, L0 G; Sargv[3]:3 6 u" l- s( @& a* m& B, t c
argv[4]:4 8 K$ M. P* M$ C5 w1 V: {; P* z- oargv[5]:last but one ) s& h, G3 O# R& f
argv[6]:stop! - P# G" I' D, T) I
argv[7]NULL) + U0 _0 ]' ~- [% C2 |1 p9 [The environment string(s) on this system are: + |' n+ P. F, {4 eenv[0]: COMSPEC=C:\COMMAND.COM / k" B$ U! q/ ~, W+ N" Denv[1]: PROMPT=$P$G /*视具体设置而定*/ , R3 ]# p* f- G" D. X6 l( F1 P' N
env[2]: PATH=C:\DOS;C:\TC /*视具体设置而定*/ 8 ]3 I6 d' r0 z% j; k
</FONT>+ ^1 ~& _: O- Z- l! d% K0 O i' L: {
应该提醒的是: 传送main() 函数的命令行参数的最大长度为128 个字符 (包 \+ v/ r, Z$ M' L, I- [括参数间的空格), 这是由DOS 限制的。 . K5 I) N l; G. W, G# H& I</P> : _2 B7 w1 a4 G& @& {) @<><FONT color=#ff0000>函数名: matherr </FONT> 3 Y3 b' t7 }4 e, s+ W5 v6 s+ f功 能: 用户可修改的数学错误处理程序 * a) F6 D, M8 N# i2 d1 \用 法: int matherr(struct exception *e); 8 k: K ^: a) F3 r程序例: </P> 0 I, C' N9 M: p- O: K6 L3 \/ m4 ]<><FONT color=#0000ff>/* This is a user-defined matherr function that prevents 6 M2 O$ m1 Z+ T$ y) [4 }- I
any error messages from being printed. */ </FONT></P># Y; ~6 t: w- d
<><FONT color=#0000ff>#include<MATH.H> </FONT></P> ; W2 h4 G) s, [2 k" O8 w8 X8 ^<><FONT color=#0000ff>int matherr(struct exception *a) 7 B+ a% p- W2 @% ~" G; a& Q Y{ 2 D5 O+ n3 V9 f+ e& e
return 1; 5 d7 ~# T# y% E+ ?, @0 G) F; a
} ' c$ l" `$ O( G& o1 d
</FONT> 7 B) v j5 M2 k1 z6 s- s- ]- g. }- `6 O/ ^* |' Q
</P> 5 D7 N4 |' S0 k& _4 p: \6 ]<><FONT color=#ff0000>函数名: memccpy </FONT>7 j g$ b& Q' Y2 l/ [
功 能: 从源source中拷贝n个字节到目标destin中 ; a+ a& x8 Z8 E& ^ e6 }
用 法: void *memccpy(void *destin, void *source, unsigned char ch, 6 [; P0 G+ i0 v( ?3 r5 f7 c6 D
unsigned n); 9 u0 A) Z3 g4 e( ~3 r/ _" M
程序例: </P>; Z7 r I/ l. R: Y, o7 R
<><FONT color=#0000ff>#include <STRING.H> ( m/ Y5 U; N9 u! |1 n- s#include <STDIO.H></FONT></P> / ~8 _9 |& Y# _/ D6 j<><FONT color=#0000ff>int main(void) % a; h/ s! e* |
{ $ K) [( m) K+ i4 b2 [
char *src = "This is the source string"; 2 L* m a+ Q9 Y7 E& P8 |) ^0 o
char dest[50]; ; [: L: w4 h5 Q' G: b" ~# Xchar *ptr; </FONT></P> 8 Y5 Y+ }6 y2 ~/ M0 }; X) }4 \<><FONT color=#0000ff>ptr = memccpy(dest, src, 'c', strlen(src)); </FONT></P> - R- G! L8 S- f( z' d3 Z0 O<><FONT color=#0000ff>if (ptr) . W1 [9 G( k6 t3 f1 ~2 Z |& n$ o1 g/ I{ 0 G$ h7 x, \0 ]*ptr = '\0'; # Z7 M+ {& v& i, e5 V* e/ U Aprintf("The character was found: %s\n", dest); 5 d6 R8 u* q( n& w} 9 b8 u2 o3 F1 d& A% h) ]" Delse # [/ ^3 r7 V8 r' B* i% eprintf("The character wasn't found\n"); " L6 C2 b8 P( q9 o0 g+ z' V5 Z4 u
return 0; ! O: V6 m: |8 U0 ?% \$ I} }0 L& z3 }4 j$ k3 h* X U+ q/ M</FONT>1 v Q3 }/ U+ j
</P>7 m9 D/ x1 @) \+ \
<><FONT color=#ff0000>函数名: malloc</FONT> 8 l0 D. P1 t9 H: J3 ~$ b功 能: 内存分配函数 - I/ c! x2 H6 L用 法: void *malloc(unsigned size); 3 p+ Q1 e& H- M; b2 R0 h程序例: </P> & i# ?7 l; \9 E: R) I<><FONT color=#0000ff>#include <STDIO.H>/ o1 v) g% W) x2 K6 h3 p7 O8 e. S1 s
#include <STRING.H>4 @$ s' Z$ r. U
#include <ALLOC.H> 6 S8 W9 K" s4 i% w#include <ROCESS.H></FONT></P> ! `5 {5 d5 Q# E7 n! V/ }<><FONT color=#0000ff>int main(void) ! @+ F8 e0 V- O8 m{ 7 r3 t- Y; B7 F5 R! @" S" [# n- k+ _
char *str; </FONT></P> z: z8 f/ @! c1 }3 }% X7 T( ^
<><FONT color=#0000ff>/* allocate memory for string */ 3 i+ P$ M6 ]0 G1 ^# e0 [5 X/* This will generate an error when compiling */ 6 a% W% s+ j# ~* y! t2 \, E/* with C++, use the new operator instead. */ ) B" O$ J! @, x" Y' Jif ((str = malloc(10)) == NULL) 9 k; {! N% ]. ^) u6 r
{ * ^5 T* k8 Q" w8 t! s) f
printf("Not enough memory to allocate buffer\n"); : g# E! C# w- x5 f
exit(1); /* terminate program if out of memory */ : M C0 p5 s6 I2 ]$ m- n0 v
} </FONT></P> ) n$ }0 ~) ~3 m<><FONT color=#0000ff>/* copy "Hello" into string */ " J1 p+ d( Z' H6 w
strcpy(str, "Hello"); </FONT></P>% m5 R2 F) U2 ?/ T( }' o9 _
<><FONT color=#0000ff>/* display string */ ( s! s$ p% R B" e t
printf("String is %s\n", str); </FONT></P>0 n0 ^3 {6 N* s3 o6 g0 U; u6 e$ m
<><FONT color=#0000ff>/* free memory */ 6 B. C' }/ x9 e* w, ~, U( B. Z* gfree(str); </FONT></P>' c S7 U6 ?: ?* Q, R/ c
<><FONT color=#0000ff>return 0; + }8 R$ d0 I; Q% T6 \* ?} . b6 d! U* ?9 T
, K2 n2 Z! y) x ?6 ]5 v+ c</FONT> - k7 M, k4 |: U& Q2 D6 J% b, C</P>' j7 s' J+ o( _0 s& a. K
<><FONT color=#ff0000>函数名: memchr</FONT> 9 Z8 O) j. e8 o P! z3 M7 c6 E5 F; L1 X
功 能: 在数组的前n个字节中搜索字符 1 j5 q% _) }6 o m Q' t6 t
用 法: void *memchr(void *s, char ch, unsigned n); 7 P4 v% z- k, P d程序例: </P>3 J2 P5 L* _1 G) c; u1 t+ n) j
<><FONT color=#0000ff>#include <STRING.H>* k2 M* R/ w& M$ n7 F1 G
#include <STDIO.H></FONT></P> 2 A1 v8 p* s. D( L0 O& H<><FONT color=#0000ff>int main(void) 5 }3 p3 D, _3 X0 K9 c{ - z) p9 X$ x1 D7 o) h7 R! }char str[17]; 7 F7 j# X8 G9 R, Ychar *ptr; </FONT></P>% C% l: j- ^$ ~
<><FONT color=#0000ff>strcpy(str, "This is a string"); 2 A: \/ J. S9 @6 n7 [) T
ptr = memchr(str, 'r', strlen(str)); , S/ \# C7 Y7 U% @4 M4 _5 u
if (ptr) , B& a! f5 V1 |2 H* l: A5 p
printf("The character 'r' is at position: %d\n", ptr - str); " X& t; B1 r8 relse ; j* q9 s: \( i$ z( o) w. wprintf("The character was not found\n"); % T: U6 z8 K0 u) j# {return 0; ) U& V$ O7 X- {} ! S+ o+ {( U. R
</FONT></P> w: ?# J" ^8 t
<><FONT color=#ff0000>函数名: memcpy </FONT>' C m' }5 C$ t4 G0 o
功 能: 从源source中拷贝n个字节到目标destin中 D6 e4 ?1 ^9 ?1 {: _; M: G用 法: void *memcpy(void *destin, void *source, unsigned n); " |$ S- O) w( r3 Z. z程序例: </P> + G5 v' n8 c. C) D% h F P# h; c<><FONT color=#0000ff>#include <STDIO.H> " Y( N) |/ T( t#include <STRING.H>! U2 T2 e8 J* J4 u$ J3 h5 P b1 C3 I
int main(void) ( s# o3 u, A# t2 A9 _: Y{ 2 T- Z$ v* d. z) D
char src[] = "******************************"; + J {0 ~7 _1 D. M( ^; q4 wchar dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709"; . {0 p6 d# N5 s2 _& j9 M% g
char *ptr; ) }# r3 Z) ]9 L) P3 H: i
printf("destination before memcpy: %s\n", dest); / F! }% r. i$ O0 q7 ]( f5 g
ptr = memcpy(dest, src, strlen(src)); % l( ^4 P4 m5 F( G4 Rif (ptr) 3 i) W9 X7 Z: n" D. \! ?printf("destination after memcpy: %s\n", dest); ) i7 X% E8 v! G3 y
else * c; w: E u( Q0 {6 e" Uprintf("memcpy failed\n"); ( T+ K" S2 U, z- ?' P. V7 Breturn 0; - |7 M" Y2 k2 K) n" C} 1 z2 S S2 c1 z3 I& q) X
</FONT> 5 z5 S: ?& h3 s4 m</P>! ^2 @8 u1 ~ ]2 [7 s7 A, p" H
<><FONT color=#ff0000>函数名: memicmp </FONT> 8 L5 \" e- D0 Q8 G: I3 z2 d功 能: 比较两个串s1和s2的前n个字节, 忽略大小写 ) y* k- n+ w) C用 法: int memicmp(void *s1, void *s2, unsigned n); ) U, y! a* ^4 P8 s, Z3 T程序例: </P> 2 t+ F; Z9 s( I: n9 R<><FONT color=#0000ff>#include <STDIO.H>- W4 G" G9 K, P( ]
#include <STRING.H></FONT></P>( l7 X2 O! R! o
<><FONT color=#0000ff>int main(void) 4 Q G6 S1 h# Y. g% ?$ h
{ % [; x: ^( @" G8 H) e5 {
char *buf1 = "ABCDE123"; 4 j$ |6 x+ _0 x: U; i* vchar *buf2 = "abcde456"; 9 G, s* `: @; A3 O
int stat; / g8 n+ S5 B) j F `+ T, }
stat = memicmp(buf1, buf2, 5); / d' {6 P- N1 t# ~$ jprintf("The strings to position 5 are "); ( s5 d5 b5 n' i- P: ]* r
if (stat) 7 X) h' a- X# x1 Nprintf("not "); % D9 x( p- Y) b2 i& Tprintf("the same\n"); 8 _: f7 [5 i, k L: d7 T! \1 N$ e) Vreturn 0; m$ Y2 T7 a8 y# x, v0 _7 b' U} 8 K# X. s# ^. D</FONT> + r% e T% o! @' E5 a* o</P>5 q% c8 E/ V) r* A4 n. Q& b
<><FONT color=#ff0000>函数名: memmove </FONT> ! ^/ L8 e8 b$ U( G功 能: 移动一块字节 % \/ ~# Z; `. ^- o
用 法: void *memmove(void *destin, void *source, unsigned n); ) V3 _7 j2 L: d' B" ^
程序例: </P> ) |8 E* ?' d, Q ^<P><FONT color=#0000ff>#include <STRING.H>, X7 u( [: Y g; g2 O& k
#include <STDIO.H></FONT></P> 5 s! A6 p2 T s6 U+ `. y<P><FONT color=#0000ff>int main(void) 2 d' w7 g/ O! S# x ]# G{ - I! T# H- p9 g$ h+ }, ]char *dest = "abcdefghijklmnopqrstuvwxyz0123456789"; ; z9 R# j! n5 V, S4 I! Gchar *src = "******************************"; / p1 }/ v r: aprintf("destination prior to memmove: %s\n", dest); 2 o, ?, _1 V2 a+ y# ^0 R; [memmove(dest, src, 26); $ J0 v u9 O( Y3 G7 g+ ^" {" N- `
printf("destination after memmove: %s\n", dest); 6 L1 H8 \; `" U7 `" b5 n% U# ereturn 0; / Z% H' `" C* p& K1 @- a} ~! x: p2 q- I6 d/ W# g * C/ h6 W5 e: w' p) }</FONT>$ ?0 V, Z3 A* y- j# h
</P> \" f2 \# [5 }9 r
<P><FONT color=#ff0000>函数名: memset </FONT>/ @) L- U4 L. w! k* ~* }! Z
功 能: 设置s中的所有字节为ch, s数组的大小由n给定 6 d& P: N6 ?, u9 [, C8 U! O用 法: void *memset(void *s, char ch, unsigned n); % @( \) r e1 y2 y) i/ m程序例: </P># V$ Q% P5 q0 r+ T; f5 e
<P><FONT color=#0000ff>#include <STRING.H>: V% |$ t9 L! M5 w0 t
#include <STDIO.H> - |, j* T8 p# V# b# H8 d#include <MEM.H></FONT></P>: t2 a; R$ c3 z2 B
<P><FONT color=#0000ff>int main(void) 0 L8 ?# c0 m E8 X2 |6 ]" d- k{ 3 r, J& O7 K5 X0 b0 Kchar buffer[] = "Hello world\n"; </FONT></P> 0 G# ^, W; b9 Y7 k<P><FONT color=#0000ff>printf("Buffer before memset: %s\n", buffer); ) w2 Z K( _- v- Amemset(buffer, '*', strlen(buffer) - 1); 1 ^ C, b* V, y4 y* jprintf("Buffer after memset: %s\n", buffer); ! D; s# U: b7 ~. p! S0 k4 areturn 0; : E, @% l$ o3 g" |7 k
} </FONT>4 I4 o4 u) b; z6 o% |6 P B% `
# q @1 @0 F' \: Y</P>+ j; p6 ?& s5 ~
<P><FONT color=#ff0000>函数名: mkdir </FONT>! d# l; W1 F- u& p, q1 v% }
功 能: 建立一个目录 # }# V! r. c( B& L
用 法: int mkdir(char *pathname); + T H/ B+ \" [9 Y L程序例: </P>% d2 q* r) F' B: K/ K) |
<P><FONT color=#0000ff>#include <STDIO.H> 1 q" x: w- N: x#include <CONIO.H>2 n# S. ^: L2 R* {' b) g
#include <PROCESS.H> # P1 i+ T3 I" \. y#include <DIR.H></FONT></P>; q/ r$ \2 [' \$ `* R! J1 H$ N: L
<P><FONT color=#0000ff>int main(void) & J) F! {5 s$ f0 \3 f0 G0 {& D x# t{ ( k5 g3 ^6 a+ T
int status; </FONT></P> 9 s" `2 \3 P1 {7 e0 x. I n<P><FONT color=#0000ff>clrscr(); % M: \5 a+ V6 u4 m+ g$ E4 i
status = mkdir("asdfjklm"); : y; W8 @3 Q! l' }8 q' R9 a(!status) ? (printf("Directory created\n")) : $ @7 e; v9 g2 f6 K(printf("Unable to create directory\n")); </FONT></P> , R$ n( @6 M/ O" l9 `<P><FONT color=#0000ff>getch(); 8 \. s7 |" i6 U* X- osystem("dir"); - [) O/ A( j: G
getch(); </FONT></P> $ E" H" K- `: `# ^ |<P><FONT color=#0000ff>status = rmdir("asdfjklm"); 9 i0 A# n R# A2 V/ l(!status) ? (printf("Directory deleted\n")) : m4 m9 S/ ] ^+ o1 |- r
(perror("Unable to delete directory")); </FONT></P>$ ?% U& c9 L+ F# ?; D. @5 G
<P><FONT color=#0000ff>return 0; |( f& s6 z3 v+ Z} 0 d2 E5 @! G5 D* B
8 o& z6 M, S4 z/ i. z: _</FONT>8 }2 q$ S9 E' R7 g
</P>* D- N( Q& S$ o1 C
<P><FONT color=#ff0000>函数名: mktemp </FONT>+ G; n6 Y+ t2 a! V+ S6 r: [+ r+ `
功 能: 建立唯一的文件名 ; u" t0 g- O& M用 法: char *mktemp(char *template); ' p1 Y3 e9 l# V* _0 T& \. G
程序例: </P> 7 y$ Z( m7 I; t<P><FONT color=#0000ff>#include <DIR.H>8 m; O. d# H$ j
#include <STDIO.H></FONT></P> ! {# p" _) o5 M<P><FONT color=#0000ff>int main(void) " M/ R8 b y# w
{ + v2 A# G. q4 T2 X3 B2 w
/* fname defines the template for the 9 }- G5 K _, i( T/ b; ^/ M U
temporary file. */ </FONT></P>3 D7 I8 _' d7 b- Q# i" l) Z7 O
<P><FONT color=#0000ff>char *fname = "TXXXXXX", *ptr; </FONT></P>; C, I3 ^3 E, x( q) s
<P><FONT color=#0000ff>ptr = mktemp(fname); 9 H" i9 S) y) [9 K% v: c3 j
printf("%s\n",ptr); 6 }- X3 Q9 Q( ]7 S
return 0; ( \- H, w) ^/ [# K! }) R; l0 z
} & q% k0 e6 R# u$ O+ v
</FONT> ( I- l; u- O$ v4 S! O( W, |: C</P> + v$ @; i# G7 p+ {) \3 @; S<P><FONT color=#ff0000>函数名: MK_FP </FONT>; F! a" d0 a/ P! F( h9 j
功 能: 设置一个远指针 . j9 j# ~) K& Q' w% `# e W4 p
用 法: void far *MK_FP(unsigned seg, unsigned off); 3 {5 c! ]/ E& v& H& `9 j' n
程序例: </P> 2 |9 { Z- `" o5 E, F) m3 n<P><FONT color=#0000ff>#include <DOS.H>4 e; f% F% U! [7 d+ i, W+ R
#include <GRAPHICS.H></FONT></P>. H) ~/ ^4 n ^ _7 {' q" L' o
<P><FONT color=#0000ff>int main(void) z: _* d: m- Q \) F3 L{ ! q; f- p T6 I8 Eint gd, gm, i; 0 j1 L u5 h& Y& a
unsigned int far *screen; </FONT></P> ! b! A- y0 E j# t$ {0 N( A4 t<P><FONT color=#0000ff>detectgraph(&gd, &gm); ; ^$ Q+ O0 B2 nif (gd == HERCMONO) 1 l0 U6 ~* K1 y1 g
screen = MK_FP(0xB000, 0); 5 _9 b9 B# }' L8 H: G
else 8 Q) [# Z9 {# X+ Z& o, P+ o/ _$ Oscreen = MK_FP(0xB800, 0); ; F$ u% z7 ~, `" D' K/ }
for (i=0; i<26; i++) & W4 k( P: w! ?' D* D1 }. e( A
screen = 0x0700 + ('a' + i); $ F$ [: w( U4 `" X5 Greturn 0; 5 i2 _ w. P- A- i: Y& E+ f
} : g+ G; `' v3 U. ~</FONT>2 e' j" |2 L' O
</P>3 E0 S( o/ j V$ H w% g
<P><FONT color=#ff0000>函数名: modf </FONT> $ ?( x2 f) ^6 h2 ]8 P" X功 能: 把数分为指数和尾数 6 c2 h2 P$ K+ B! I8 P
用 法: double modf(double value, double *iptr); # I* r4 S0 o; w U% v8 V/ {# s程序例: </P>5 p) R- t$ r5 {, I. e
<P><FONT color=#0000ff>#include <MATH.H> & a" r$ o+ Y2 R) ~! @- [#include <STDIO.H></FONT></P> : t6 i, D9 u. R2 S2 ^( @' w; M<P><FONT color=#0000ff>int main(void) 9 D' s/ s c# ^. e! o
{ , ?5 S/ F6 B7 a* Udouble fraction, integer; 3 ]6 u( Z" A! ~5 m/ `
double number = 100000.567; </FONT></P>2 q' l$ F& _4 A. e% w% F* R) }- O
<P><FONT color=#0000ff>fraction = modf(number, &integer); 5 j) O1 O3 Y# _3 S8 {# n% g1 U
printf("The whole and fractional parts of %lf are %lf and %lf\n", 9 c5 t& N3 R( O" ^0 ?8 G6 bnumber, integer, fraction); 0 e! D& T7 I3 N Z3 L) d$ O6 c6 f
return 0; ) O u4 | `5 n6 K$ c- n
} </FONT> " c4 p2 E6 H1 q% ?$ `4 [' m5 z% G( a! `$ o# K
</P> ' d D! G5 {# {0 g" R. @. D<P><FONT color=#ff0000>函数名: movedata </FONT> 1 c: T& i. E+ n: w) U功 能: 拷贝字节 % ?" K& g% {2 s& m% L6 y- N
用 法: void movedata(int segsrc, int offsrc, int segdest, 8 b% d! r! L( p6 b
int offdest, unsigned numbytes); # M0 h1 p! V9 M2 M& {- O
程序例: </P>2 p( p0 s; r- J; i4 B% C6 h
<P><FONT color=#0000ff>#include <MEM.H></FONT></P> % G3 J- [7 _: L8 A<P><FONT color=#0000ff>#define MONO_BASE 0xB000 </FONT></P>% m( Y Q* z8 b c3 C6 n
<P><FONT color=#0000ff>/* saves the contents of the monochrome screen in buffer */ ! ` n- L' D6 b# X: E* `void save_mono_screen(char near *buffer) " L+ ^. e8 R' a0 _0 a% a
{ ) k! l" W" s+ s/ e- b) [movedata(MONO_BASE, 0, _DS, (unsigned)buffer, 80*25*2); 6 t8 X, D" r O0 @- x
} </FONT></P>) e+ G/ V7 S7 Z5 H% m1 E* J
<P><FONT color=#0000ff>int main(void) . u1 v. n/ @! ^* m. m1 L
{ . U9 \) P; r; ?0 Z" r$ @& Wchar buf[80*25*2]; 1 E) P. A' X$ s+ Osave_mono_screen(buf); @" X; C; D, \
} * p: _8 [0 ~- h
</FONT> / e& L$ x8 M* p. I</P> 4 a5 `0 x y( G4 D" k& W<P><FONT color=#ff0000>函数名: moverel </FONT> 3 t- _7 C, Q" y功 能: 将当前位置(CP)移动一相对距离 ) m! c1 m% G6 L% m, b$ d. E
用 法: void far moverel(int dx, int dy); & Y* \2 D, O; ^6 E% k3 u
程序例: </P>/ s, H( Z& u8 u4 u3 t# \
<P><FONT color=#0000ff>#include <GRAPHICS.H> ! }& V! Z* L1 U: \0 r#include <STDLIB.H>' s7 s$ r' B: O
#include <STDIO.H>9 m5 e5 {9 p1 h8 B( ~, T9 H# c8 N
#include <CONIO.H></FONT></P>. U( ^+ R: B( v, Q) l( `. U9 E( A
<P><FONT color=#0000ff>int main(void) . Q, f* ~( V; t% Q/ Q8 w
{ ( z/ r3 h1 ~, p9 h9 I
/* request auto detection */ % d7 E$ }5 \5 ~0 vint gdriver = DETECT, gmode, errorcode; . o9 K. g; Q6 L$ \ W1 w; H" J
char msg[80]; </FONT></P> 3 Y; ~6 C/ M2 M3 M5 q9 e% ?<P><FONT color=#0000ff>/* initialize graphics and local variables */ ' f4 A% W7 C! m" ^3 r) ?8 x+ J
initgraph(&gdriver, &gmode, ""); </FONT></P> 7 o1 G, t* r* t' T1 n<P><FONT color=#0000ff>/* read result of initialization */ & {+ ~4 W8 }0 J* V! l$ Q
errorcode = graphresult(); 3 K, G" c1 Z5 g4 ^8 Z% X' s5 lif (errorcode != grOk) /* an error occurred */ ; I2 s/ c! e& B4 T( }5 G/ W{ 4 N6 z f6 r* u0 v+ W' w& M
printf("Graphics error: %s\n", grapherrormsg(errorcode)); 5 S* I5 Q% J/ Z1 X: |1 @ nprintf("Press any key to halt:"); 5 U9 u5 w* s/ }' K! ~# q! |
getch(); ) o& u) C. Z; u8 y: k
exit(1); /* terminate with an error code */ + s3 l" r6 W' b7 B9 g1 B
} </FONT></P>8 w/ W5 |, U3 N* ?: ?( B \9 c" c
<P><FONT color=#0000ff>/* move the C.P. to location (20, 30) */ . f* u6 g+ H7 Y% @6 O
moveto(20, 30); </FONT></P># E$ f/ [# O4 ^/ U: N' M( P
<P><FONT color=#0000ff>/* plot a pixel at the C.P. */ ! q$ E1 \$ y9 A! T
putpixel(getx(), gety(), getmaxcolor()); </FONT></P>, |; L# `* ^+ U( s
<P><FONT color=#0000ff>/* create and output a message at (20, 30) */ $ j9 C) i( n1 z+ q* p5 C A4 W
sprintf(msg, " (%d, %d)", getx(), gety()); ) D. n! Y6 l, s# `
outtextxy(20, 30, msg); </FONT></P>. @0 U$ D% q4 q( |1 f
<P><FONT color=#0000ff>/* move to a point a relative distance */ " Y" i9 P# O3 u9 j/ m
/* away from the current value of C.P. */ , r6 t" p6 g* N2 y* a( Y0 c
moverel(100, 100); </FONT></P> 0 Z7 D7 ^6 q |, c<P><FONT color=#0000ff>/* plot a pixel at the C.P. */ ' K# q. r9 x7 Z2 d% t7 o1 xputpixel(getx(), gety(), getmaxcolor()); </FONT></P>. I% Y+ a U& Q( b h' d& O% w
<P><FONT color=#0000ff>/* create and output a message at C.P. */ - d3 M% r; }0 {; I$ u
sprintf(msg, " (%d, %d)", getx(), gety()); 4 c) P% h; @1 e; d$ _outtext(msg); </FONT></P>3 `5 {0 p/ K/ [, u0 N' ?3 P
<P><FONT color=#0000ff>/* clean up */ + |* Y) e8 }2 F. Bgetch(); . Q! e+ u9 P9 j O. e, M" Pclosegraph(); 1 h3 V- D8 g+ [
return 0; 7 m6 ~$ n# p% [2 j- U} 4 m( o. H1 [. S+ ~/ w: ~/ n</FONT>( E9 O0 ]" ]" U$ e
</P>& [3 Y+ b3 R) M0 v1 D$ i$ a$ m
<P><FONT color=#ff0000>函数名: movetext</FONT> 7 k; Z, _/ y; t1 z
功 能: 将屏幕文本从一个矩形区域拷贝到另一个矩形区域 # ~9 O- |' n8 n' N' ?* C- ]8 E* ^
用 法: int movetext(int left, int top, int right, int bottom, 0 ]7 `9 ]2 q, S# j9 Xint newleft, int newtop); ; [0 h6 m$ ?4 P程序例: & [7 M9 s- H6 _0 g
<FONT color=#0000ff>#include <CONIO.H> ( j; [( D! x" Y+ k* R#include <STRING.H></FONT></P>( ^* p% k0 E9 r5 h0 h& W
<P><FONT color=#0000ff>int main(void) ' X( J- _1 \" ?+ O{ 5 l9 P3 } y6 c* ~! B8 H$ dchar *str = "This is a test string"; </FONT></P> m' o0 g9 s. W7 V: A% x8 {<P><FONT color=#0000ff>clrscr(); & l7 a+ M* e% [ ?, ^- Xcputs(str); 7 n5 K& ~3 ^ Z. D# Sgetch(); </FONT></P> 7 N$ |. H% B1 B/ Z+ _( _3 c( Z<P><FONT color=#0000ff>movetext(1, 1, strlen(str), 2, 10, 10); 7 O$ u8 `6 x9 U' ?9 j! igetch(); </FONT></P>4 n: ~" g! I+ D4 v
<P><FONT color=#0000ff>return 0; # U4 [& U* @1 R* A) a# b) v
} 4 p/ n) v) e6 \, v* B& X4 l$ S# y+ C4 F
</FONT></P> - T/ A! k1 t9 N4 Y- t5 F" r7 R( |<P><FONT color=#ff0000>函数名: moveto</FONT> : u, n' C: ^. J
功 能: 将CP移到(x, y) 1 H8 H9 t, c6 V8 V2 Z4 n
用 法: void far moveto(int x, int y); . m! K4 ~+ u5 v+ Z8 ~0 U& M% V J程序例: </P>* X& M' d/ o' r) |& G/ R% v
<P><FONT color=#0000ff>#include <GRAPHICS.H># l8 B, h8 I* a1 n2 t
#include <STDLIB.H> % {2 p/ z1 h: R2 k+ U1 M7 L. l7 m#include <STDIO.H> ( t, \) s) q* R6 [! C- n3 g' b#include <CONIO.H></FONT></P> 8 Y0 ?: u2 M) B' d<P><FONT color=#0000ff>int main(void) 6 |. \6 E$ r7 _{ ( m% n& O) ^4 r7 B+ e( m
/* request auto detection */ + I; G, l s5 jint gdriver = DETECT, gmode, errorcode; . V0 h1 Z% W# i4 Y* u: q) i
char msg[80]; </FONT></P>! v2 r' ]+ \; A! T! v
<P><FONT color=#0000ff>/* initialize graphics and local variables */ 1 V9 ?; N3 ]# l* H) Binitgraph(&gdriver, &gmode, ""); </FONT></P> 0 P1 _% I) R& Z6 b; j) ^ A7 p8 Y% U<P><FONT color=#0000ff>/* read result of initialization */ ! a! n7 N0 L# A$ ]- w r6 t6 r ^
errorcode = graphresult(); , D9 l+ O# D) ]/ F
if (errorcode != grOk) /* an error occurred */ / B/ l8 g. _) ~$ k6 E; S8 k{ , `9 d* r9 C0 C
printf("Graphics error: %s\n", grapherrormsg(errorcode)); 5 o3 g" s/ f9 O- m5 F) q
printf("Press any key to halt:"); - C( P# v# w" e |, X+ J3 e* Hgetch(); # C, v: r7 m! W6 D; E
exit(1); /* terminate with an error code */ # N$ t9 F6 e2 ^} </FONT></P>; W* v R' {$ T* Q1 S) K" J
<P><FONT color=#0000ff>/* move the C.P. to location (20, 30) */ 7 A" J. l+ b. } D% d
moveto(20, 30); </FONT></P>$ K/ |2 t4 W; o% O' m. t
<P><FONT color=#0000ff>/* plot a pixel at the C.P. */ * A% z7 A( u- H$ l2 I+ z; M: Dputpixel(getx(), gety(), getmaxcolor()); </FONT></P>* _ z( E. q9 q. n& v+ n2 z
<P><FONT color=#0000ff>/* create and output a message at (20, 30) */ ; C. Z4 r; m' h9 y7 y2 L* w
sprintf(msg, " (%d, %d)", getx(), gety()); . c+ r- k8 t2 o/ W2 k8 Z! |
outtextxy(20, 30, msg); </FONT></P>9 u1 S/ w+ v- t i- u
<P><FONT color=#0000ff>/* move to (100, 100) */ * X% l! m$ }3 g4 i
moveto(100, 100); </FONT></P> + [" x; `; `5 x<P><FONT color=#0000ff>/* plot a pixel at the C.P. */ . b8 x- h" i* m {' S3 Iputpixel(getx(), gety(), getmaxcolor()); </FONT></P>4 q, {7 L8 P7 u, u+ r) n
<P><FONT color=#0000ff>/* create and output a message at C.P. */ ) b" ^& r$ x' D8 B2 I2 N0 ^, K) Isprintf(msg, " (%d, %d)", getx(), gety()); 9 L* u. a; W; z( F+ Wouttext(msg); </FONT></P> 3 I% v2 E6 h6 F+ { B8 @<P><FONT color=#0000ff>/* clean up */ * G+ q* }: n% [9 |getch(); ( e e( t# s, O9 d m# u
closegraph(); + h( o7 e0 w9 I7 m3 W
return 0; , [8 ?: l- f9 {2 Y( Z) S
} 6 c0 K* h$ |# b6 x6 ?* O- s7 t5 D7 E: z
</FONT>8 z* ?2 d- {4 B1 x+ W
</P> , o; I* W ]) C$ l4 p' Y+ h. A<P><FONT color=#ff0000>函数名: movemem </FONT> 7 b W/ Z- F* P1 t功 能: 移动一块字节 7 I2 }3 a& L9 _. w
用 法: void movemem(void *source, void *destin, unsigned len); ( M& n& [9 A4 @4 X程序例: </P> n; h" Z# y/ f6 K<P><FONT color=#0000ff>#include <MEM.H> " X+ L! x# A+ d1 y+ d#include <ALLOC.H> 7 I' h+ ?! q x' z1 S, q#include <STDIO.H> 3 F7 ]' Q' [5 W) P s1 a#include <STRING.H></FONT></P>3 w% a& t3 r3 g: _0 D1 V- p
<P><FONT color=#0000ff>int main(void) ) M. s# p8 x1 K" ~- n8 \{ " d4 s! Y4 ?" w; P' K- Kchar *source = "Borland International"; : O* J* E! i- h3 u/ @: u& B- [
char *destination; : o' F# J& ~# x/ q: I) N8 f, S* Y5 Qint length; </FONT></P> ! t) X' v" }) c6 H5 r<P><FONT color=#0000ff>length = strlen(source); # W8 o f7 K. \$ ~6 Q- j9 r# c7 C8 Fdestination = malloc(length + 1); # }0 @# J9 h! L
movmem(source,destination,length); 3 X+ C( C+ B* H1 Q5 O4 _" L
printf("%s\n",destination); </FONT></P> 2 o, V' X0 g% I9 p<P><FONT color=#0000ff>return 0; # K! k4 K* |. U4 I" L# o
} . _- s3 B0 O3 T# s/ v
% j. F/ ?" m" r' i5 F& ]( b</FONT></P>& T- w* r1 ^* M: _4 O) N% p
<P><FONT color=#ff0000>函数名: normvideo </FONT>7 g# m% f' v' E1 r& p' o) p4 s
功 能: 选择正常亮度字符 " T! S7 m* w# P! u
用 法: void normvideo(void); 0 I/ \: r+ {. O0 f* Y8 a( p程序例: </P> 9 x( ^+ }) j& Q7 q<P><FONT color=#0000ff>#include <CONIO.H></FONT></P> , S! A! q0 a2 @, H# x<P><FONT color=#0000ff>int main(void) ' I, o7 [: U+ S B
{ ( n& @, {( o& v: n0 v
normvideo(); * N) l) x' Z* q1 A" [; zcprintf("NORMAL Intensity Text\r\n"); 8 m, T9 t4 N: b2 P; d; \6 I* i9 kreturn 0; 3 X. k) g1 M1 f. n' V5 u& y} 4 n2 M# q$ ]+ G: o9 {& T
V" {0 Y3 L7 B5 t</FONT></P> 2 i( R0 h6 \6 d7 A<P><FONT color=#ff0000>函数名: nosound</FONT> / B! W' w! R9 y& ~6 j! B
功 能: 关闭PC扬声器 : S, Z" H6 a. A. U# N
用 法: void nosound(void); % s% r9 S& l! f7 k1 L$ y
程序例: </P>: P$ i0 D [+ x0 S0 E( p8 A3 F1 }7 s
<P><FONT color=#0000ff>/* Emits a 7-Hz tone for 10 seconds. </FONT></P> % V& o; L1 M; P) d& k<P><FONT color=#0000ff>True story: 7 Hz is the resonant frequency of a chicken's skull cavity. % _+ {2 u2 ^7 E3 Z4 g. ~5 TThis was determined empirically in Australia, where a new factory 3 T9 s; i) W& o: f# ]0 cgenerating 7-Hz tones was located too close to a chicken ranch: & L" F8 k1 [ i1 o0 zWhen the factory started up, all the chickens died. </FONT></P> 0 q9 J7 b1 m% W s* a# M8 O<P><FONT color=#0000ff>Your PC may not be able to emit a 7-Hz tone. ( I" f9 x) o$ G! M7 K*/ </FONT></P> 3 a x' W7 {& X/ S<P><FONT color=#0000ff>int main(void) ) K4 S+ q0 y* s0 }; Z$ Q! m. T
{ " N0 H' s; p' B& rsound(7); 2 N4 \" v& e0 [! I( ~+ @! V! S& t
delay(10000); ! J! ~9 `5 N, u& x5 p6 I+ I
nosound(); ( o! p. O; M! }5 j. z' ^}0 Y ]+ f/ j4 o- b9 L
</FONT></P>