【发布时间】:2021-02-14 06:01:38
【问题描述】:
为什么 IDE 认为有错误?
"case 标签值已经出现在这个开关的第 9 行 C/C++(1578)"
int main(int argc, char const *argv[])
{
for (int i = 0; i < argc; i++)
{
switch (*argv[i])
{
case 'drow': printf("drow detected");
break;
case 'drows': printf("drows detected"); //line 9
break;
case 'rows': printf("rows detected"); //error at the first apostrophe '
break;
default: printf("Unknown arg, skipping.");
break;
}
}
return 0;
}
【问题讨论】:
-
您希望通过
'drow'之类的表单获得什么?对于编译器,它是 'd' => 你有两次case 'd' -
您不能在
switch语句中使用字符串。将字符串放在单引号中并不神奇,它只是将字符串变成chars;我很惊讶你的编译器没有给你一个错误或至少一个警告。使用一系列if语句,使用strcmp代替。 -
无论如何
*argv[i]给出每个参数字符串的第一个字符 - 而不是字符串本身,即argv[i]。
标签: c char switch-statement command-line-arguments c-strings