使用char数组用于switch语句

时间:2016-02-13 02:18:13

标签: c switch-statement

如何在char声明中使用switch数组?

如果我这样做,

switch (argv[i]) {
    case '-': .....
    default: ......
}

我收到错误:

  

切换数量不是整数。

3 个答案:

答案 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)