Utilisation switch case

Résolu/Fermé
Breton22000 Messages postés 9 Date d'inscription jeudi 5 mai 2016 Statut Membre Dernière intervention 24 mai 2016 - 5 mai 2016 à 16:27
Breton22000 Messages postés 9 Date d'inscription jeudi 5 mai 2016 Statut Membre Dernière intervention 24 mai 2016 - 5 mai 2016 à 19:04
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 :)





A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
5 mai 2016 à 16:43
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
Breton22000 Messages postés 9 Date d'inscription jeudi 5 mai 2016 Statut Membre Dernière intervention 24 mai 2016
5 mai 2016 à 18:03
D'accord, je m'en étais douté un peu, merci beaucoup !
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
5 mai 2016 à 17:14
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>

1
Breton22000 Messages postés 9 Date d'inscription jeudi 5 mai 2016 Statut Membre Dernière intervention 24 mai 2016
5 mai 2016 à 18:09
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 !
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > Breton22000 Messages postés 9 Date d'inscription jeudi 5 mai 2016 Statut Membre Dernière intervention 24 mai 2016
5 mai 2016 à 18:21

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*/
0
Breton22000 Messages postés 9 Date d'inscription jeudi 5 mai 2016 Statut Membre Dernière intervention 24 mai 2016
5 mai 2016 à 19:04
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 !
0