C程序最大的特點就是所有的程序都是用函數來裝配的。main()稱之為主函數,是所有程 序運行的入口。其余函數分為有參或無參兩種,均由main()函數或其它一般函數調用,若調用 的是有參函數,則參數在調用時傳遞。 main() { ... y1=f1(x1,x2); ... } f1(int a,int b) { .... Y2=f2(x3,x4); .... } f2(int m,int n) { .... ..... } 在前面課程的學習中,對main()函數始終作為主調函數處理,也就是說,答應main()調用 其它函數并傳遞參數。事實上,main()函數既可以是無參函數,也可以是有參的函數。對于有 參的形式來說,就需要向其傳遞參數。但是其它任何函數均不能調用main()函數。當然也同樣 無法向main()函數傳遞,只能由程序之外傳遞而來。這個具體的問題怎樣解決呢? 我們先看一下main()函數的帶參的形式: main(argc,argv) int argc,char *argv[]; { ..... } 從函數參數的形式上看,包含一個整型和一個指針數組。當一個C的源程序經過編譯、鏈接后,會生成擴展名為.EXE的可執行文件,這是可以在操作系統下直接運行的文件,換句話說,就是由系統來啟動運行的。對main()函數既然不能由其它函數調用和傳遞參數,就只能由 系統在啟動運行時傳遞參數了。 在操作系統環境下,一條完整的運行命令應包括兩部分:命令與相應的參數。其格式為: 命令參數1參數2....參數n¿ 此格式也稱為命令行。命令行中的命令就是可執行文件的文件名,其后所跟參數需用空格分隔,并為對命令的進一步補充,也即是傳遞給main()函數的參數。 命令行與main()函數的參數存在如下的關系: 設命令行為:PRogram str1 str2 str3 str4 str5 其中program為文件名,也就是一個由program.c經編譯、鏈接后生成的可執行文件program.exe,其后各跟5個參數。對main()函數來說,它的參數argc記錄了命令行中命令與參數的個數,共6個,指針數組的大小由參數argc的值決定,即為char*argv[6],指針數組的取值情況如圖6-15所示。 數組的各指針分別指向一個字符串。應當引起注重的是接收到的指針數組的各指針是從命令行的開始接收的,首先接收到的是命令,其后 才是參數。 下面用實例來說明帶參數的main()函數的正確使用。 [例6-29] 利用圖形庫函數繪制一個變化的環。它是把一個半徑為R 1的圓周分成n份,然 后以每個等分點為圓心,以R s為半徑畫n個圓(關于作圖的具體理論本教材第9章第1節作了專 門介紹,這里只作簡單分析)。利用m a i n ( )函數的帶參數形式,我們可以從鍵盤以命令行的方 式輸入R 1和R s及屏幕的背景色。 #include <graphics.h> /*包含圖形庫函數的頭文件* / #include <math.h> #define pi 4.1415926 m a i n ( a r g c , a r g v ) int argc;char *argv[]; /* 定義帶參數的m a i n ( ) * / { int x,y,r1,rs,color; double a; int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,"..//bgi ")啟;/動*圖形工作方式*/ r1=atoi(argv[1]);/*計算基礎圓半徑*/ rs=atoi(argv[2]);/*計算同心圓半徑*/ color=atoi(argv[3]);/*背景色*/ cleardevice();/*清除圖形屏幕*/ setbkcolor(color);/*設置背景色*/ setcolor(4);/*設置圖形顯示顏色*/ for(a=0;a<=2*pi;a+=pi/18)/*繪制同心圓*/ { x=r1*cos(a)+320; y=r1*sin(a)+240; circle(x,y,rs);/*以圓心坐標為x、y,半徑為rs畫圓*/ } getch();/*等待按鍵繼續*/ close graph();/*關閉圖形工作方式*/ } 若程序名為L6-29.c,經編譯、連結生成可執行文件L6-29.exe。在操作系統的環境下運行 程序,命令行方式為: l6-29 40 20 3 則命令行與main()函數的參數有如圖6-16所示的關 系。 圖6-16中,argv[0]是程序名,argv[1]是r1的值, argv[2]是rs的值,argv[3]是屏幕的背景色。 由于指針數組均存放字符串,所需的圓半徑及背景 色彩通過atoi()函數轉換為整型。 通過帶參數的main()函數,我們可以為自己的程序設置口令,在運行程序的命令行中給出所需的口令,正確則繼續,否則退出。程序圖形輸出如圖6-17所示。 [例6-30]將上述程序作修改,在程序的入口處添置密碼,若給定密碼正確,則顯示圖 形。 #include<graphics.h> #include <math.h> #define pi 4.1415926 m a i n ( a r g c , a r g v ) int argc;char *argv[]; { int x,y,r1,rs,color; double a; int gdriver=DETECT,gmode; if (strcmp(argv[1],"pass")!=0) 設/置* 口令的比較*/ { printf("passWord error!/n"); e x i t ( 0 ) ; } initgraph(&gdriver,&gmode,"..//bgi "); r1=atoi(argv[2]); rs=atoi(argv[3]); color=atoi(argv[4]); cleardevice(); setbkcolor(color); setcolor(4); for(a=0;a<=2*pi;a+=pi/18) { x=r1*cos(a)+320; y=r1*sin(a)+240; circle(x,y,rs); } getch(); closegraph(); } 在操作系統的環境下運行程序, 命令行中增加口令“p a s s”,命令行方式為: l6-30 pass 20 40 3 指針數組的存儲字符串如圖6-18所示。 若給定字符串argv[1]的值是pass,則程序正確運行,否則程序退出??诹钫_的情況下,顯示的圖形為圖6-17中的一個。