C中的(切换)问题

时间:2010-11-21 19:11:15

标签: c switch-statement

scanf("%ld",&l);
printf ("l=%ld",l);
switch (l)
{
case'1':
XOR(&matrix1[10],&matrix2[10],m);
break;
case'2':
AND(&matrix1[10],&matrix2[10],m);
break;
default:
printf("\n\t\tWrong input");
}

当程序到达switch时,无论我输入什么(无论是错还是右),程序都会一直显示按摩(输入错误),尽管我输入了正确的数字(1或2)

8 个答案:

答案 0 :(得分:5)

更改案例标签
case'1':
  ...
case'2':
  ...

case 1:
  ...
case 2:
  ...

说明:您的开关值是整数,而不是字符,因此您的案例标签需要整数常量,而不是字符常量

答案 1 :(得分:1)

您的案例应该是case 1而不是case '1'

答案 2 :(得分:1)

'1'!= 1

注意:'1'接近60或类似的东西,'因为单引号意味着“使用char”(或它的ASCII代码)。尝试从您的交换机案例中删除'em:

scanf("%ld",&l); printf ("l=%ld",l); switch (l) { case 1: XOR(&matrix1[10],&matrix2[10],m); break; case 2: AND(&matrix1[10],&matrix2[10],m); break; default: printf("\n\t\tWrong input"); }

或者您可以将输入从数字更改为char:

scanf("%c", &l);

答案 3 :(得分:1)

但你不是在读一个角色,但你的情况就是角色。重写如下:

switch (l)
{
case 1:
XOR(&matrix1[10],&matrix2[10],m);
break;
case 2:
AND(&matrix1[10],&matrix2[10],m);
break;
default:
printf("\n\t\tWrong input");
}

答案 4 :(得分:0)

'1'和1不一样。

答案 5 :(得分:0)

因为您的开关依赖于整数。而你正在接受一个字符串。你需要先通过atoi运行l。

答案 6 :(得分:0)

'1'是一个字符,数字1的ASCII表示。改为使用plain 1。

case 1:
    /*...*/
    break;

答案 7 :(得分:0)

那是因为:

case '1':

与:

不同
case 1:

第二个是你似乎期待的那个。