伊莉討論區

標題: 關於 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 argvC語言的關鍵字,是專門用在命令列的參數名。
2、argcargument 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!