命令行参数inter c

时间:2013-02-08 22:06:29

标签: c integer

我想让这个程序在main()中进行打印,只有没有命令行参数。 如果有命令行参数(应该只是一个整数),它应该运行函数bitcount()

我该怎么做呢?如果没有命令行参数,我不确定这将如何正常工作。

如何检查用户是否输入命令行参数?如果他们这样做,请运行bitCount()而不是main()。但是如果他们没有放任何命令行整数参数,那么它只会运行main。

例如./bitCount 50应该调用bitCount函数 但是./bitCount应该只运行main

这是我到目前为止所拥有的:

#include <stdio.h>
#include <stdlib.h>

int bitCount (unsigned int n);
int main ( int argc, char** argv) {

    printf(argv);
    int a=atoi(argv);

    //   int a = atoi(argv[1]);

    printf ("# 1-bits in base 2 representation of %u = %d, should be 0\n",
      0, bitCount (0));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 1\n",
      1, bitCount (1));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 16\n",
      2863311530u, bitCount (2863311530u));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 1\n",
      536870912, bitCount (536870912));
    printf ("# 1-bits in base 2 representation of %u = %d, should be 32\n",
      4294967295u, bitCount (4294967295u));
    return 0;
  }

  int bitCount (unsigned int n) {
      //stuff here
  }

2 个答案:

答案 0 :(得分:0)

int argc包含命令行中的参数个数,其中可执行文件的名称为argv [0]。因此,argc < 2表示没有给出命令行参数。我真的不明白你想要或不想在没有命令行参数的情况下运行,但它应该在if (argc < 2)之后。

在您的示例代码中,您正在做一些非常奇怪的事情,记住这一点:

printf(argv);

因为argv是char **char *数组,它永远不会产生任何有用的东西。更糟糕的是,由于printf期望格式字符串作为其第一个参数,上面的行可能会导致各种奇怪的事情。

int a=atoi(argv);

在这里。 atoi也想要一个字符串,与上面相同。

答案 1 :(得分:0)

argv是一个包含程序名称后跟所有参数的字符串数组。 argc是argv数组的大小。对于程序名称,argc始终至少为1。

如果有参数,argc将是&gt; 1。

所以,

if (argc > 1)
{
    /* for simplicity ignore if more than one parameter passed, just use first */
    bitCount(atoi(argv[1]));
}
else
{
    /* do stuff in main */
}