输出

2017-02-03 30 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