我的开关功能出了什么问题? 看起来像这样
void ss(int argc, char *argv[])
{
int side_length = 200;
double red = 0.0;
double green = 0.0;
double blue = 0.0;
for (int i = 1; i <= argc; i++) {
printf("%s\n", argv[i]);
if (*argv[i] == '-'){
switch (*++argv[i]) {
case 'r':
red = sin(0.2*atof(argv[i++]));
printf("argv: %f\n", sin(0.2*atof(argv[i++])));
printf("red: %f\n", red);
break;
}
}
}
}
我打算稍后添加更多切换案例,但是现在我专注于红色,所以我可以复制它。似乎问题在于它只是没有将我想要的值存储为红色,它返回其他printf语句中的值就好了。
编辑:我已经同时使用了(int i = 1; i&lt; argc; i ++)和for(int i = 1; argv [i]!='\ 0'; i ++)并且两者都没有用。还在寻找答案。
答案 0 :(得分:1)
你试图用增量运算符一次做太多。结果,您对代码的作用感到困惑。具体来说,在计算正弦时,在循环内部增加i
两次。
仅在需要时才打破额外增量:
for (int i = 1; i < argc; i++) {
printf("%s\n", argv[i]);
if (argv[i][0] == '-'){ // check the first char of the current arg
switch (argv[i][1]) { // check the second char of the current arg
case 'r':
red = sin(0.2*atof(argv[i+1])); // grab the value from the next arg
printf("argv: %f\n", sin(0.2*atof(argv[i+1]))); // grab the next arg again
printf("red: %f\n", red);
i++; // do an extra increment at the end since we processed 2 args
break;
}
}
}
答案 1 :(得分:0)
由于i++
操作太多,您的程序会调用未定义的行为,因为您访问argv
数组越界。
之后,你无法对程序的行为说些什么。甚至允许删除所有文件。