伊莉討論區
標題:
關於 int main(int argc, char *argv[ ]) ...
[打印本頁]
作者:
goodbye_mylove
時間:
2007-10-2 01:01 PM
標題:
關於 int main(int argc, char *argv[ ]) ...
本帖最後由 kev72806 於 2013-7-6 02:39 AM 編輯
命令列參數的使用
【前言】:
C
語言提供一個可以在命令列中將參數引入的功能。也就是說,我們可以在
MS-DOS
模式下,在執行檔名稱的後面,可以填入需要的參數。
舉例:假設在
MS-DOS
模式下,鍵入如下指令:
type abc.txt
【說明】:
type
指令的作用是「顯示檔案的內容」。
type abc.txt
即顯示
abc.txt
這個文字檔的內容。
【目的】:
為了使主程式能夠接收使用者輸入的參數,在主函數
main( )
中,必須有適合的格式。
int main(argc,argv)
int argc;
char *argv[];
{
return 0;
}
或是
int
main(int argc, char *argv[])
{
return 0;
}
命令列參數的格式
命令列參數的格式
【說明】:
1、argc
與
argv
為
C
語言的關鍵字,是專門用在命令列的參數名。
2、
argc
是
argument count
(
參數總和
)
的縮寫,代表包括指令本身的參數個數。
系統會自動計算所輸入的參數個數。
3、
argv
則是
argument value
的縮寫。代表參數值。
也就是使用者在命令列中輸入的字串,每個字串以空白相隔。
同時,系統會自動將程式本身的名稱指定給
argv[0]
,再將程式名稱後面所接續的參數依序指定給
argv[1]
、
argv[2]….
。
作者:
goodbye_mylove
時間:
2007-10-2 01:07 PM
標題:
範例一:印出命令列參數的內容(show.c)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[ ])
{
int i ;
/* 印出命令列參數的內容 */
printf("The value of argc is %d \n",argc);
for(i=0;i<argc;i++)
printf("argv[%d]=%s\n",i,argv
);
system(“PAUSE”);
return 0;
}
執行:
c:\> show Hello my word
/*** 註1 ***/
執行時,請你用 命令提示字元 執行,然後鍵入 show hello my word
就是開始→執行→ cmd
然後我所有預設的執行目錄(就是我所生成的 show.exe ) 都是放在 C:\> 底下的
如果你想在 D:\My_Porgramming> 執行,
就把你的 porgramming 放在該目錄底下
/*** 註2 ***/
這個範例可能還不夠清楚
我再發一個更清楚的範例給你
作者:
goodbye_mylove
時間:
2007-10-2 01:08 PM
標題:
範例二:印出指定的檔案內容(printfile.c)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[ ])
{
FILE *fptr;
char ch;
if(argc>1) /* 命令列有參數輸入時 */
{
fptr=fopen(argv[1],"r"); /* 開啟檔案 */
if(fptr!=NULL) /* 檔案開啟成功 */
{
while((ch=getc(fptr))!=EOF) /* 判斷是否到達檔尾 */
printf("%c",ch); /* 一次印出一個字元 */
fclose(fptr); /* 關閉檔案 */
}
else /* 檔案開啟失敗 */
printf("File Opening Failure!!\n");
}
system(“PAUSE”);
return 0;
}
執行:
c:\> printfile abc.txt
/**註1**/
請自行編一abc.txt檔。
/**註2**/
詳細的運行方式請參考上面的方式
/**註3**/
最後再發一個 example 給你,
(基本上有這二個 example 加上原文說明應該都懂了)
[
本帖最後由 goodbye_mylove 於 2007-10-2 01:11 PM 編輯
]
作者:
goodbye_mylove
時間:
2007-10-2 01:14 PM
標題:
範例三:複製檔案內容(fcopy.c)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fptr1,*fptr2;
char ch;
if(argc>2) /* 命令列有參數輸入時 */
{
fptr1=fopen(argv[1],"r"); /* 開啟檔案 */
fptr2=fopen(argv[2],"w");
if((fptr1!=NULL) && (fptr2!=NULL)) /* 檔案開啟成功 */
{
while((ch=getc(fptr1))!=EOF) /* 判斷是否到達檔尾 */
putc(ch,fptr2); /* 一次拷貝一個字元 */
fclose(fptr1); /* 關閉檔案 */
fclose(fptr2);
printf("File copy successful!!\n");
}
else /* 檔案開啟失敗 */
printf("File Opening Failure!!\n");
}
else
printf("File copy Failure!!\n");
system(“PAUSE”);
return 0;
}
執行:
c:\> fcopy abc.txt des.txt
/** 註 **/
我已努力表達裡面的意義了
再看不懂的話請自行再查詢資料
我很笨,
表達能力沒那麼強!
作者:
ttfznp
時間:
2007-10-2 05:09 PM
標題:
回復 #4 goodbye_mylove 的帖子
謝謝大大的分享
我本來不知道的觀念
現在終於明白ㄌ
作者:
bowbow5944
時間:
2007-10-5 10:47 AM
感謝大大的解說~~!!
作者:
joanne51001
時間:
2007-10-8 06:43 PM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
sea392
時間:
2009-10-11 03:45 AM
對初學者的我很有參考價值
作者:
icekeeper225625
時間:
2009-10-11 04:31 PM
本帖最後由 icekeeper225625 於 2009-10-11 04:34 PM 編輯
我還是不懂耶......
真正寫起來很奇怪
這是我的程式碼
#include <stdio.h>
int main(int argc,char *argv[])
{
int nagi, tomo, sanae;
{
printf("*");
for (tomo = 1;tomo <= argv[1];tomo++)
printf("%d", tomo);
{
for (nagi = 1;nagi <= argv[1];nagi++)
{
printf("\n");
printf("%d",nagi);
for (sanae = 1;sanae <= argv[1];sanae++)
printf("-",sanae);
}
printf("\n");
}
}
return 0;
}
要怎麼做才能把命令列成功指出來呢@@
我是寫99乘法表
倒數第二個printf裡是% 2 d
它都給我顯示-......
作者:
www99
時間:
2009-10-27 11:27 PM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
erwin0421
時間:
2011-3-2 07:03 PM
謝謝大大的分享
C++真的很難懂
不過還是要好好學!
作者:
frankpis
時間:
2012-3-28 03:07 AM
謝謝樓主的解說!正在想有沒有什麼範例可以看。你真的是救星
作者:
gerry0622
時間:
2012-3-28 09:13 AM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
st880632520
時間:
2012-5-19 03:22 AM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
chevylin0802
時間:
2012-5-19 08:40 AM
icekeeper225625 發表於 2009-10-11 04:31 PM
我還是不懂耶......
真正寫起來很奇怪
這是我的程式碼
argv[1] 是char*的型態 不是integer的型態 所以會有問題
作者:
truelazo
時間:
2012-5-19 10:24 AM
可以參考一下其他教科書,例如How to program和歐來理都有相當的篇幅介紹。argv[0]為程式本身,argv[1] 為第一個參數,在網路上有getopt的函數可以用。
作者:
許白
時間:
2013-3-29 04:26 PM
本帖最後由 許白 於 2013-3-31 02:56 PM 編輯
感謝分享 註解都有打 好感恩 QQ
作者:
wsiml7y
時間:
2013-7-3 07:08 AM
好感謝,說明得很清楚,大概能理解他的意思了
歡迎光臨 伊莉討論區 (http://www.wahas.com/)
Powered by Discuz!