Utilisation switch case [Résolu/Fermé]

Signaler
Messages postés
9
Date d'inscription
jeudi 5 mai 2016
Statut
Membre
Dernière intervention
24 mai 2016
-
Messages postés
9
Date d'inscription
jeudi 5 mai 2016
Statut
Membre
Dernière intervention
24 mai 2016
-
Bonjour,

Dans mon programme j'utilise switch case, mais cela ne fonctionne pas. Je ne comprends pas mon erreur. Il me dit que j'ai une erreur aux lignes où l'utilisateur doit entrer plusieurs lettres, par ex "zd". Si quelqu'un peut m'aider, je suis preneur.
A-t-on le droit de mettre un "ou" (||) dans un case ?


Merci d'avance et bonne fin de journée :)





2 réponses

Messages postés
16078
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
27 octobre 2020
2 705
Bonjour,

Ce que tu testes avec
switch(select)
c'est un
char
, il faut donc que chaque
case
soit un
char
, donc
case 'z'
est correct, mais
case "ed"
n'a pas de sens puisque ce n'est pas un
char
.

Et non, le
||
n'a pas de sens dans un
case
, si tu veux tester plusieurs valeurs tu dois faire plusieurs
case
. Exemple :

switch(x) {
    case 'a' :
        printf("a");
        break;
    case 'b' :
    case 'c' :
        printf("b or c");
        break;
    default :
        printf("not a nor b or c");
}
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
9
Date d'inscription
jeudi 5 mai 2016
Statut
Membre
Dernière intervention
24 mai 2016

D'accord, je m'en étais douté un peu, merci beaucoup !
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 707
Bonjour,

En plus de la réponse de KX,

Tu mélanges les caractères et les chaînes de caractères. L'utilisateur doit taper une lettre ou peut en taper plusieurs ?
On suppose qu'il ne doit en taper qu'une seule.

char select;
scanf("%s",&select);

Pas bon ça. Plutôt "%c" puisque select est de type char. Ou plus efficace :
select=getchar();

Mais si tu fais ça, il faut penser à vider le buffer clavier.
Si cela ne te parle pas, en lieu et place de ton scanf("%s",&select); mets simplement :
getchar();
select=getchar();


tab[i][j]=...
Que vaut i et j ? Tu as oublié d'indiquer leur valeur. Cela va donc faire n'importe quoi. Que souhaites-tu faire ? Une boucle for ?

Note : merci pour les prochaines fois, de copier coller ton code (pas de capture d'écran) et d'utiliser la balise code.
Exemple :
<code c>ici tu mets ton code</code>

Messages postés
9
Date d'inscription
jeudi 5 mai 2016
Statut
Membre
Dernière intervention
24 mai 2016

Bonjour,

Justement, moi je voulais qu'il puisse en taper soit une seule, soit plusieurs ! Ce n'est pas possible ?
Concernant tab[i][j], il faut l'initialiser à vide ?

En fait c'est une grille de jeu, et ce sous-programme est utilisé pour déplacer un pion.

Ah ok, merci pour l'info.

Merci de ton aide !
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 707 >
Messages postés
9
Date d'inscription
jeudi 5 mai 2016
Statut
Membre
Dernière intervention
24 mai 2016


Justement, moi je voulais qu'il puisse en taper soit une seule, soit plusieurs ! Ce n'est pas possible ?

Dans un char ce n'est pas possible.
Il faut dans ce cas utiliser une chaîne de caractère.
Par exemple :
/*à mettre juste après les #include*/
#define TAILLE 3

char select[TAILLE]; /*à mettre à la place de ton char select;*/

Note : j'ai mis 3 en supposant qu'il peut mettre 2 caractères maximum (le 3ème étant le '\0' final).
Et dans ce cas, il faut bien mettre : scanf("%s", select); (pas de &select, puisque select est converti en pointeur). Ou plus sécurisé : scanf("%2s", select);

Pour la comparaison de chaînes de caractères, tu ne peux plus utiliser l'opérateur ==. Il faut utiliser la fonction strcmp(). Par exemple :
if(strcmp(select,"zq")==0) {
     /*cas où select est égal à zq*/
}
else if (strcmp(select, "z")==0) {
     /*cas où select est égal à z*/
}


Concernant tab[i][j], il faut l'initialiser à vide ?
Oui, déjà il faut initialiser la matrice tab. Tu peux créer une fonction dédiée.
Ensuite, tu ne peux pas utiliser i et j sans les définir eux-même.
Si tu veux déplacer les pions il faut partir de ligne / colonne (et non i et j). Les coordonnées de la case de départ sont (ligne/colonne). Quelles sont les coordonnées de la case d'arrivée ? ligne+1/colonne ?
Le déplacement devrait correspondre à un truc du genre :
tab[ligne+...][colonne]=tab[ligne][colonne];
tab[ligne][colonne]=...; /*tu mets le caractère correspondant à une case vide*/
Messages postés
9
Date d'inscription
jeudi 5 mai 2016
Statut
Membre
Dernière intervention
24 mai 2016

Ah oui, merci, je vais donc utiliser strcmp !
Oui c'est bien ça, les coordonnées de départ de sont (ligne/colonne). Les coordonnées d'arrivée dépendent de la commande tapée juste avant.
Je vois ce que tu veux dire, super tu m'as bien aidé. Merci beaucoup à toi !