如何在char
声明中使用switch
数组?
如果我这样做,
switch (argv[i]) {
case '-': .....
default: ......
}
我收到错误:
切换数量不是整数。
答案 0 :(得分:1)
在switch中,表达式必须是“整数类型”
执行一组if / else而不是switch 。
答案 1 :(得分:0)
你真的不能这样做。
argv[i]
是一个内存地址,一个数字,它不是一个字符串,不能与另一个"字符串"进行隐式比较。 (字面的char数组)。使用switch
语句,只能比较整数类型。您可以在" string":
switch(argv[i][0]){
case '-': .....
default: ......
}
但那可能不是你想要的......
直接的解决方案是使用一组if() ... else if() ...
语句:
if(!strcmp(argv[i], "-")) {
//...
} else if(!strcmp(argv[i], "some other value")) {
//...
} else {
// non of these...
}
答案 2 :(得分:0)
根据C11:
6.8.4.2 开关语句
1 switch语句的控制表达式应该是整数 类型。
不幸的是,在switch语句中永远不能使用非整数类型。
另外,argv[1]
实际上是char*
。这很容易理解,因为int main(int argc, char *argv[])
只相当于int main(int argc, char **argv)