我正在Bash上的命令行运行C ++程序,该程序位于Linux环境中。我很好奇你如何从命令行传递一个参数。这是我的计划:
#include <iostream>
using namespace std;
int large_pow2( int n );
int main()
{
int value = 15;
int largest_power = large_pow2(value);
cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl;
return 0;
}
int large_pow2( int n )
{
int i = n
int j = i & (i - 1);
while( j != 0)
{
i = j;
j = i & (i - 1);
}
return j;
}
编译程序后,我希望能够使用命令行传入一个用于value
的数字。例如,要运行该程序,请键入./"program_name"
,其中"program_name"
是我的程序名称,不带引号。有没有办法设置value = n
或其他什么?当我运行该程序时,假设我希望n
为20
,所以在命令行中输入类似./"program_name" 20
的内容。然后该程序将与n = 20
一起运行。有没有办法做到这一点?我对Linux环境和Bash都是全新的,所以还不知道如何在其中做任何事情。
答案 0 :(得分:2)
在argc
中使用argv
和int main(int argc, char *argv[])
并相应修改您的代码。
argc
参数跟踪从CLI
传递给您的程序的参数数量,并且始终> gt = 1。当1
它是程序的名称时。所以argc[0]
是程序名称。
argv
包含命令行参数,而不是程序名,并且始终为char字符串。因此,如果您不想要字符串,我们需要使用适当的转换器,如atoi
。
所以你的代码看起来像是,为了简单起见错误检查
int main(int argc, char *argv[])
{
//Now we expect argc ==2, program value, This will when argc != 2
// We should use if in real scenario
assert(argc == 2);
int value = atoi(argv[1])
int largest_power = large_pow2(value);
cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl;
return 0;
}
答案 1 :(得分:1)
你的main方法可以采用(int argc,char ** argv),这是参数计数和NUL终止的args。程序路径是argv [0]所以atoi(argv [1])可能就是你想要的。检查argc == 2.