C++讀取命令提示字元的參數

在C/C++中讀取Command line參數是利用Main函數的兩個參數來處理,

這兩個參數的順序與寫法是固定的,

第一個參數int型態給你的是總共有輸入幾個參數,

第二個參數char**型態給你的是參數的"字串",要注意這是C-style的字串。

NOTE: 會需要寫這個小程式的目的就是,要澄清到底是程式得到的寫錯,還是其他的問題。

下面一個可以顯示所有輸入參數的程式

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char** argv)
{
    for (int i=0 ; i<argc ; ++i)
        cout <"[" <<"]" <argv[i] <endl;
    
    return 0;
}



實際測試這隻程式的時候會發現

在Command line 輸入

ListCommandLineArgs.exe foo 1234

會輸出

[0]ListCommandLineArgs.exe
[1]foo
[2]1234

程式讀取到的[0]號參數,往往都是你的程式名稱or程式路徑,

而[1]號參數之後就是我們剛剛在Command line中所輸入的。

所以實際上我們會得到的參數數目總是會多1,也就是我在Command line輸入3個參數,程式會獲得argc=4。




上面提過,因為[*]號參數都是C-style字串資料,所以我們如果要整數or浮點數資料,就需要經過轉換

C函數庫中的 atoi 和 atof 函數就可以幫忙轉換成 int 和 double

    arg_i = atoi(argv[1]);
    cout << "Second arg=" << arg_i << endl;
    printf("Second arg=%d\n", arg_i);

    arg_d = atof(argv[2]);
    cout << "Third arg=" << arg_d << endl;
    printf("Third arg=%lf\n", arg_d);


輸入Command line參數的潛規則

  1. 當參數中有空白,就會認為是下一個參數,除非符合下面的規則。
  2. 當一個參數最前面使用雙引號,後面的任何字元都會是這個這個參數的內容
    所以路徑中有空白可以用雙引號包起來。如果想要獲得一個純粹的雙引號,可以輸入\"
  3. 當一個參數內部出現一個雙引號(例如:112"123,會被視為是不存在的字元。當內部有了兩個雙引號後,這兩個雙引號所包括的字元都會被當作一串參數,
    因此當連續
    輸入了3個雙引號,也可以獲得一個雙引號。
  4. 還有其他規則



留言