C语言程序设计技巧
在许多应用软件运行时都带有命令行参数,其实这些命令行参数在C语言编写的程序中也可以实现,灵活地运用命令行参数进行处理可以有效地提高程序的运行效率,收到事半功倍的效果。
6 W7 q- R% `- [+ ~' _5 i+ h# A# Nwww.520diannao.com6 Y7 O7 L( G* @. n
C语言中有关命令行参数涉及到程序的主函数main(int argc,char *argv[]这样两个参数,其中,int argc表示命令行参数的个数(包括可执行程序名本身),char *argv[]表示每个参数的具体内容,argv[0]为命令行中可执行程序名本身,argv[1]为命令行中第二个参数的内容,依次类推。如下例输出命令行参数的个数及参数的内容:
, h! Y" h$ d1 U0 Y2 Lwww.520diannao.com我爱电脑技术社区--打造最好的电脑技术自学交流平台7 n. U: U' } a/ I- L3 w
main (int argc,char *argv[],
& g4 p3 e/ a9 {, c我爱电脑技术社区--打造最好的电脑技术自学交流平台 {int I;
5 o' B4 U4 }4 G5 C( F6 V我爱电脑技术社区--打造最好的电脑技术自学交流平台 printf("命令行中可执行文件名为:%s",argv[0]);( `( u7 M8 A9 _1 F% K" o( ^
printf("总共有%d个参数:",argc);我爱电脑技术论坛+ r. k7 H2 z H8 i; \
I=0;电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站! S0 s7 Y- F& r5 {- u' U
while(argc>=1)我爱电脑技术社区--打造最好的电脑技术自学交流平台& a" a' u S0 l3 s, v! j! \' ~
{printf(″%s ",argv[I++]);
) I: w/ g y4 o打造最好的电脑自学交流论坛 argc--;}
: J4 t3 A3 q0 D! z打造最好的电脑自学交流论坛 }
8 N' M4 p3 r& K) W. S- K; t
! w d, x' o) o+ h; a, l8 Q我爱电脑技术社区--打造最好的电脑技术自学交流平台 命令行参数用的最多还是在诸如DIR A:等之类带有盘符、路径或文件名这样的命令行中,所以说灵活处理这一类参数才能有效地提高程序的运行效果。譬如DIR命令,其后可以是盘符,可以是路径,也可以是文件名,如何区分这一参数呢?请看下例(此程序模拟DIR命令,程序要求在命令行输入一个参数:盘符或路径或文件名,若无参数或参数多于一个都将取默认的参数“*.*”)。我爱电脑技术社区--打造最好的电脑技术自学交流平台+ Z( F6 e5 l7 v
" w/ e( ]# P2 v7 |# Q2 x5 |& F0 ]电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 \*--------------------电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站; A- }1 l" ?6 W( @4 R7 f
功能:模拟DIR命令进行处理命令行参数我爱电脑技术社区--打造最好的电脑技术自学交流平台+ S5 u3 B& r c
--------------------*/电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站4 l7 G: q/ s# v* V+ Q1 q+ p+ r
#include
% E2 r- y0 i/ t/ c1 i8 l, lwww.520diannao.com #include
! k1 \0 P; i. [打造最好的电脑自学交流论坛 #include
' x. T" o8 l @$ ^7 N5 [" a我爱电脑技术社区--打造最好的电脑技术自学交流平台 #inchlude电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站6 C1 Y9 R- g8 J# @* P9 H' a
int j,num=0;0 I+ p2 x( y' Z3 L0 D% W! K
char ss[20],path[50],path2[50];我爱电脑技术社区--打造最好的电脑技术自学交流平台4 j, J2 a* Z; E* l+ r9 v
void main (int argc,char *argv[])我爱电脑技术社区--打造最好的电脑技术自学交流平台( P- Y" s- s$ E+ O* m: C
{打造最好的电脑自学交流论坛7 U+ Z9 x, W* @* |& q
struct ffblk f;
- q2 T& q1 e, P! xwww.520diannao.com int done;我爱电脑技术社区--打造最好的电脑技术自学交流平台/ J4 J. n5 G* J; A* a
if(argc==2) /*取命令行参数到数组中*/
5 l B) F, P4 |+ \5 q, @, cwww.520diannao.com strcpy(ss,argv[1]);我爱电脑技术社区--打造最好的电脑技术自学交流平台5 i' I6 h. @# w5 x, ^5 a1 w8 N
else! w7 E" V' M, K+ k) q4 l
strcpy(ss,″*.*″); /*给数组赋值缺省参数*/
; s: r% y* P' pwww.520diannao.com if (((ss[strlen(ss)-1]==′\\′||((ss[strlen(ss)-1]==':'))
: P2 w$ d' u! q4 Pwww.520diannao.com strcat(ss,″*.*″); /*若参数为路径或盘符,则加上″*.*″ */我爱电脑技术社区--打造最好的电脑技术自学交流平台/ T: Z- D9 E4 v9 }, W" G: N1 r
getcwd(path1,50); /*取当前路径*/我爱电脑技术论坛) b* s9 ]) M! t7 O0 e
if (chdir(ss)==0) /*判断参数是否为路径*/
: F* d- X0 }, |" I' ? strcat(ss,"\\*.*"); /*若路径末没有带"\",则加上"*.*" */我爱电脑技术论坛* Z, Q+ Z+ T0 t
chdir(path1); /*恢复原来路径*/
4 e5 w' q' m f9 }我爱电脑技术论坛 strcpy(path2,ss);电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站; V* W! J0 J0 f n6 @
for(j=strlen(path2);j>0;j--)/*提取参数中的路径到path2 */
( J3 j5 s3 \. G0 J% C S6 ~; k! S打造最好的电脑自学交流论坛 {if((path2[j]=='\\'))||(path2[j]==':')){
3 O( {" K% G. y- e# Dwww.520diannao.com path2[j+1]='\0';打造最好的电脑自学交流论坛) F' F, u5 |5 {$ _6 d. ]% w
goto senull;}
1 ?3 c2 q) ~; q$ mwww.520diannao.com }
' \% ^0 i4 m7 {, y# g1 ]7 rwww.520diannao.com path2[0]='\0';
3 u; R1 Y2 m; J4 t% `( K7 v0 |电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 senull:
6 H: i3 h- r* E! s3 D( [! Mwww.520diannao.com if(strlen(path2)==0) /* 若给出的参数中没带路径,则取当前路径*/我爱电脑技术社区--打造最好的电脑技术自学交流平台. Y) p9 f F! D& s/ R/ l
strcpy(path2,path1);www.520diannao.com! h% f7 E& m" ~. h9 u. s
printf("**模拟DIR** 命令目录路径%s",path2);我爱电脑技术社区--打造最好的电脑技术自学交流平台& n2 X7 X! R( X1 Y
done=findfirst(ss,&f,55); /*查找第一个配匹的文件*/
7 |( t- ]+ A7 d4 G& k% d% _, V1 x电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 j=1;
: H* ?+ B. Y5 y5 P) Z' I我爱电脑技术社区--打造最好的电脑技术自学交流平台 while(!done)电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站+ f8 e3 |; Q) h9 }3 x
{if (f.ff_attrib!=0x10) /* 若文件属性不是目录 */
* J7 I& O1 U* G+ w7 S printf(" %15s %20ld",f.ff_name,f.ff_fsize);
# S# V5 U8 Y3 }% o- P) g电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 else电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站! M |" C; d4 g* |( m6 \( ?
printf(" &11s ",f.ff_name);
8 `4 \6 k* ~! B) y9 z7 u+ @" s' K我爱电脑技术社区--打造最好的电脑技术自学交流平台 num++;
) G5 b$ d; }# c3 p: b9 ^/ J( ?www.520diannao.com j++;我爱电脑技术社区--打造最好的电脑技术自学交流平台% y) J0 j+ ]4 u, u
if(j==23), m$ i; [( J- o, o; s6 \) [
printf(" --------More (按任意键继续)----");电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站' R' ]4 _: l" j& F' L
getch();电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站; X0 f. g7 f2 j
j=0;
8 [# r; g, b) h1 U+ z0 A我爱电脑技术社区--打造最好的电脑技术自学交流平台 printf(″ (目录路径%s)″,path2);}电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站, m. }. c* S# P$ w
done=findnext(&f); /*查找下一个配匹的文件*/
6 G. a& q2 `2 l0 dwww.520diannao.com }
( S3 \- D! ~" R" G' j1 O dwww.520diannao.com printf(″ 当前目录中总共有%d个文件.″,num);