2010-11-21 98 views
1
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)。用C与(开关)的问题

+0

l是什么类型? int或char?我问,因为它不是显而易见的代码:) – 2010-11-21 19:15:03

+1

@Grigory:它应该是显而易见的,我是一个长整型,不是? – 2010-11-21 19:16:29

+1

请不要用1来命名变量。哦,等一下,是不是?或者我...? ehh – erenon 2010-11-21 19:18:08

回答

5

更改你的情况从

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

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

说明标签:你的开关值是整数,而不是一个字符,因此你需要整数常量,你的情况标签,而不是字符常数。

0

'1'和1不一样。

1

'1'= 1

!注: '1' 是近60或类似的东西,“造成单引号的意思是 “用字符”(或它的ASCII码)。尝试从你的开关盒中取出“时间:

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"); } 

或者你也可以从数字更改输入字符:

scanf("%c", &l); 
0

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

+0

“%ld”是“long”的格式说明符;是什么让你觉得他正在阅读一个字符串?你有错误的方法;开关是字符常量,但输入是一个整数。 – Clifford 2010-11-21 19:18:42

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"); 
} 
0

'1'是char,数字1.使用的ASCII表示平原1代替。

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

这是因为:

case '1': 

是不一样的:

case 1: 

第二个是你似乎在期待的一个。