2016-02-06 163 views
1

我正在Linux環境中的Bash命令行中運行C++程序。我很好奇你是如何從命令行傳入參數的。下面是我的程序:將參數傳遞給Bash命令行中的函數

#include <iostream> 
using namespace std; 

int large_pow2(int n); 

int main() 
{ 
    int value = 15; 
    int largest_power = large_pow2(value); 

    cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl; 

    return 0; 
} 

int large_pow2(int n) 
{ 
    int i = n 
    int j = i & (i - 1); 
    while(j != 0) 
    { 
     i = j; 
     j = i & (i - 1); 
    } 
    return j; 
} 

後,我編譯我希望能夠使用命令行中的數字,傳遞給使用value程序。例如,要運行該程序,請鍵入./"program_name",其中"program_name"是我的程序名稱,不帶引號。有沒有辦法設置value = n什麼的?當我運行程序時,假設我想要n20,所以在命令行上輸入類似./"program_name" 20的東西。然後該程序將與n = 20一起運行。有沒有辦法做到這一點?我對Linux環境和Bash完全陌生,所以不知道如何在其中做些事情。

+0

http://en.cppreference.com/w/cpp/language/main_function。注意'main's參數的描述。 –

回答

2

使用argcargvint main(int argc, char *argv[])並相應地修改您的代碼。

argc參數跟蹤從CLI傳遞給您的程序的參數數量,並且始終> = 1。當1它是程序的名稱。所以argc[0]是程序名稱。

argv保存命令行參數,而不是程序名稱,並且始終是char字符串。因此,如果你不想要字符串,我們需要使用適當的轉換器,如atoi

所以,你的代碼看起來像,檢查沒有做過錯誤的簡單

int main(int argc, char *argv[]) 
{ 
    //Now we expect argc ==2, program value, This will when argc != 2 
    // We should use if in real scenario 
    assert(argc == 2); 
    int value = atoi(argv[1]) 
    int largest_power = large_pow2(value); 

    cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl; 

    return 0; 
} 
+1

太棒了,謝謝。我很好奇,但如果我只是想傳入一個整數參數,那麼爲什麼我需要'char []'? – GenericUser01

+0

在答案中更新。請看看 – dlmeetei

+0

好吧,這很有意義。另一個問題(對於很多問題抱歉,我只是試圖理解這一點以備將來參考),我得到'argc'指向傳遞給程序的參數的數量,但爲什麼它從未被使用?例如,'argv'在main的頭部,但是我們在'value'的初始化中使用它。我的問題有意義嗎?我很抱歉,如果它以混亂的方式措辭。 – GenericUser01

1

你的主要方法可以採取(INT ARGC,字符** argv的),這些參數的計數和NUL終止ARGS。程序路徑是argv [0],所以atoi(argv [1])可能就是你想要的。檢查argc == 2。