我正在编写一个与BMP文件一起使用的函数。我遇到传递命令行参数的问题。
每当我使用调试器时,它都说我的所有变量都等于零。为什么是这样?我希望它等于命令行参数。
int main(int argc, char** argv)
{
int side_length = 200;
int x_offset = 0;
int y_offset = 0;
double r = 1.0;
double g = 1.0;
double b = 1.0;
for(int i = 1; i < argc - 1 ; i++)
{
if(strcmp(argv[i], "-s"))
{
side_length = atoi(argv[i+1]);
}
else if(strcmp(argv[i], "-x"))
{
x_offset = atoi(argv[i+1]);
}
else if(strcmp(argv[i], "-y"))
{
y_offset = atoi(argv[i+1]);
}
else if(strcmp(argv[i], "-r"))
{
r = atof(argv[i+1]);
}
else if(strcmp(argv[i], "-g"))
{
g = atof(argv[i+1]);
}
else if(strcmp(argv[i], "-b"))
{
b = atof(argv[i+1]);
}
}
draw_waves(side_length, x_offset, y_offset, r, g, b);
return 0;
}
答案 0 :(得分:0)
strcmp()
返回0,所以你应该这样做:
if(strcmp(argv[i], "-s") == 0)
答案 1 :(得分:0)
您当前代码的几个问题。这是更接近的事情:
#include <stdio.h>
int main(int argc, char** argv)
{
int side_length = 200;
int x_offset = 0;
int y_offset = 0;
double r = 1.0;
double g = 1.0;
double b = 1.0;
for (int i_flag = 1; i_flag < argc; i_flag += 2) {
int i_val = i_flag + 1;
if (i_val >= argc) {
fprintf(stderr, "Missing value for flag %s\n", argv[i_flag]);
return 1;
}
if (strcmp(argv[i_flag], "-s") == 0) side_length = atoi(argv[i_val]);
else if (strcmp(argv[i_flag], "-x") == 0) x_offset = atoi(argv[i_val]);
else if(strcmp(argv[i_flag], "-y") == 0) y_offset = atoi(argv[i_val]);
else if(strcmp(argv[i_flag], "-r") == 0) r = atof(argv[i_val]);
else if(strcmp(argv[i_flag], "-g") == 0) g = atof(argv[i_val]);
else if(strcmp(argv[i_flag], "-b") == 0) b = atof(argv[i_val]);
else {
fprintf(stderr, "Unknown flag %s\n", argv[i_flag]);
return 2;
}
}
printf("side=%d xofs=%d yofs=%d r=%f g=%f b=%f\n",
side_length, x_offset, y_offset, r, g, b);
return 0;
}
然后
$ gcc foo.c -o foo
$ ./foo
side=200 xofs=0 yofs=0 r=1.000000 g=1.000000 b=1.000000
$ ./foo -s 1 -x 2 -y 3 -r 1.5 -g 2.5 -b 3.5
side=1 xofs=2 yofs=3 r=1.500000 g=2.500000 b=3.500000
$ ./foo -a 1
Unknown flag -a
$ ./foo -a
Missing value for flag -a
剩下的弱点是atoi
和atof
默默地为坏args返回零。这不是一件好事。请考虑使用sscanf
并检查其返回值以验证转换是否正确。