0

我想让这个程序在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
  }
4

2 回答 2

0

int argc包含命令行中的参数数量,其中可执行文件的名称是 argv[0]。所以,argc < 2意味着没有给出命令行参数。我真的不明白在没有命令行参数的情况下你想要或不想运行什么,但它应该在if (argc < 2).

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

printf(argv);

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

int a=atoi(argv);

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

于 2013-02-08T22:08:38.627 回答
0

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

如果有参数 argc 将 > 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 */
}
于 2013-02-08T22:12:58.343 回答