輸出

2017-02-03 16 views
2
#include <iostream> 

using namespace std; 

int main(int argc, char* argv[]) { 

    int i; 

    i = 1; 
    while (i < argc) { 
     cout << argv[i] << endl; 
     i = i + 1; 
    } 

} 

的命令行參數被列爲BFI輸出

我只是學習argc和argv,但是從我的理解,是ARGC參數的個數從命令行傳遞(本例中爲3),argv是這些參數的數組,[bfi]在這種情況下。所以使用這個,我直覺地認爲這個循環應該輸出argv [1],然後argv [2],然後終止。因此最終輸出將是:

˚F

然而,考慮到解決方案是:

b

˚F

i

這對我來說是莫名其妙的。任何人都可以解釋我的思維過程中出錯的地方嗎?

回答

5

argv[0]實際上是您用來運行該程序的名稱。

所以,如果你跑:

./myProgram b f i 

argv包含["./myProgram", "b", "f", "i"]argc == 4。 (這實際上並不是標準的一部分,但是在大多數平臺上是正常的行爲)。

作爲一個稍微有趣的旁白,請注意它保證argv[argc]==nullptr,所以你可以迭代有效的指針,而不是使用索引,如果你想。

A for循環保持迭代邏輯比while更獨立;你寫的循環更常見的形式是這樣的:

for (int i = 0; i < argc; ++i) { 
    std::cout << argv[i] << '\n'; // see note below 
} 

此外,請重新考慮你的東西通常被認爲是不好的做法使用:using namespace std;endl

+1

哦,我明白了,所以這是argv實際上是一個有4個元素的數組。這正好解決了這個問題,並使我的argc/argv練習的其餘部分更加直觀,非常感謝! – Mock

+0

@Mock請參閱我剛添加的其他一些樣式問題的額外說明。 – BoBTFish

+0

是'endl'糟糕的做法,因爲它不使用命名空間,或者是否有其他原因? – user1952500