我想让这个程序在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
}
答案 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 */
}