查看完整版本: 關於 int main(int argc, char *argv[ ]) ...
頁: [1] 2

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,再將程式名稱後面所接續的參數依序指定給argv、argv….。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

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 ***/

這個範例可能還不夠清楚

我再發一個更清楚的範例給你...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

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,"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 編輯 ]...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

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,"r");      /* 開啟檔案 */
                fptr2=fopen(argv,"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


/** 註 **/

我已努力表達裡面的意義了
再看不懂的話請自行再查詢資料
我很笨,
表達能力沒那麼強!...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

ttfznp 發表於 2007-10-2 05:09 PM

回復 #4 goodbye_mylove 的帖子

謝謝大大的分享
我本來不知道的觀念
現在終於明白ㄌ
:biggrin: :biggrin:<br><br><br><br><br><div></div>

bowbow5944 發表於 2007-10-5 10:47 AM

感謝大大的解說~~!!:24: :24: :24:

joanne51001 發表於 2007-10-8 06:43 PM

還蠻詳細的講解...打這麼多真是辛苦...謝謝你的分享...

sea392 發表於 2009-10-11 03:45 AM

對初學者的我很有參考價值 {:1_newredface:}

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;tomo++)
    printf("%d", tomo);
      {
        for (nagi = 1;nagi <= argv;nagi++)
          {
            printf("\n");
            printf("%d",nagi);
            for (sanae = 1;sanae <= argv;sanae++)
            printf("-",sanae);
          }
        printf("\n");
      }
   }
   return 0;
}
要怎麼做才能把命令列成功指出來呢@@
我是寫99乘法表
倒數第二個printf裡是% 2 d
它都給我顯示-.........<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

www99 發表於 2009-10-27 11:27 PM

謝謝大大!!

^^

感覺很實用!!<br><br><br><br><br><div></div>

erwin0421 發表於 2011-3-2 07:03 PM

謝謝大大的分享
C++真的很難懂
不過還是要好好學!

frankpis 發表於 2012-3-28 03:07 AM

謝謝樓主的解說!正在想有沒有什麼範例可以看。你真的是救星

gerry0622 發表於 2012-3-28 09:13 AM

感謝樓主的分享!讓我能建立更全盤的觀念,還有範例可以參考!
附帶一提,在show的範例中的印出好像有誤印不出正確字串!

st880632520 發表於 2012-5-19 03:22 AM

如果是用fread和fwrite去寫的話
該如何去編寫???

我試了好多遍都是 else 的回應

chevylin0802 發表於 2012-5-19 08:40 AM

icekeeper225625 發表於 2009-10-11 04:31 PM static/image/common/back.gif
我還是不懂耶......
真正寫起來很奇怪
這是我的程式碼


argv 是char*的型態 不是integer的型態 所以會有問題
<br><br><br><br><br><div></div>
頁: [1] 2