如何解决C开关盒标签值已经出现
为什么IDE认为有错误?
“案例标签值已出现在此开关的第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;
}
解决方法
您正在使用多字节字符常量作为标签
case 'drow':
其值是int
类型的实现。
C标准6.4.4.4字符常量。
包含多个的整数字符常量的值 字符(例如'ab'),或包含字符或转义序列 没有映射到单字节执行字符的是 实现定义的。
因此,常量'drow'
和'drows'
似乎具有相同的整数值。
编译器可能会发出一条消息,指出常量'drows'
的类型过长。
另一方面,switch语句中使用的表达式
switch (*argv[i])
不是多字节字符。因此,无论如何,switch语句是没有意义的。
可以使用if-else语句代替switch语句。例如
if ( strcmp( argv[i],"drow" ) == 0 )
{
//...
}
else if ( strcmp( argv[i],"drows" ) == 0 )
{
//...
}
else if ( strcmp( argv[i],"rows" ) == 0 )
{
//...
}
else
{
//...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。