【发布时间】:2017-04-28 00:02:34
【问题描述】:
我正在编写一个适用于 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;
}
【问题讨论】:
-
strcmp(argv[i], "-s")-->strcmp(argv[i], "-s")==0或!strcmp(argv[i], "-s") -
你用的是什么调试器?
-
'最好使用(POSIX 或 GNU)
getopt()函数。除此以外,在测试其中一个选项之后,您转换下一个参数,但您不会跳过它。因此,如果用户执行-b -4,您可能会得到有趣的结果。当您不报告无法识别的选项时,它不会受到伤害;如果你这样做了。 (循环中缺少else。) -
@BLUEPIXY 啊!谢谢!
-
@Code-Apprentice 修复了问题,但是我用的是gdb
标签: c command-line