2010-11-21 4 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"); 
} 

Lorsque le programme atteint switch, peu importe ce que j'entre (que ce soit bien ou mal), le programme continue d'afficher le massage (entrée incorrect), bien que je suis entré dans une bon numéro (1 ou 2).Un problème avec (switch) en C

+0

De quel type s'agit-il? int ou char? Je demande parce que ce n'est pas évident à partir du code que vous montrez :) –

+1

@Grigory: il devrait être évident que l est un long int, non? –

+1

s'il vous plaît ne pas utiliser 1 pour nommer une variable. Oh attends, c'est un l? Ou un je ...? ehh – erenon

Répondre

5

Modifier votre cas étiquettes de

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

à

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

Explication: la valeur de votre commutateur est un nombre entier , pas un caractère, d'où vous avez besoin entier constantes pour vos étiquettes de cas , pas caractère constantes.

0

'1' et 1 ne sont pas identiques.

1

'1' = 1

Note: '1' est près de 60 ou quelque chose comme ça, parce que des guillemets simples signifient "en utilisant char" (ou son code ASCII). Essayez de retirer « em de vos cas de commutation:

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

Ou vous pouvez modifier votre entrée de numérique char:

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

Parce que votre commutateur est un entier compte sur. Alors que vous prenez une chaîne. Vous devrez d'abord passer par Atoi.

+0

"% ld" est un spécificateur de format pour un 'long'; qu'est-ce qui te fait penser qu'il lit une corde? Vous l'avez dans le mauvais sens; le commutateur est sur les constantes de caractères, mais l'entrée est un entier. – Clifford

1

Mais vous ne lisez pas un caractère mais vos cas sont des caractères. Réécrire comme suit:

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' est un char, la représentation ASCII du chiffre 1. Utilisez plaine 1 au lieu.

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

C'est parce que:

case '1': 

n'est pas la même chose que:

case 1: 

Le second est celui que vous semblez attendre.