Switch + Répétition

Résolu
URK -  
 URK -
Bonsoir à tous,

Voilà pour un excercice j'aimerai utilisé le switch mais j'ai un mauvais affichage, je vous file la partie du code avec le switch

do {
        puts("\n\nChoose what u want\ni : Initialisation\nd : Display\na : Add\ne : Exit");
        scanf("%c", &clavUtil);
        switch (clavUtil) {
            case INIT: gmInit(&dRC);
                break;
            case ADD: puts("Put Ur Error Message\n");
                scanf("%s", &sMsg);
                gmAdd(sMsg, &dRC);
                if (dRC == GM_FULL) {
                    puts("Error : The Table's Full");
                } else if (dRC == GM_ERROR) {
                    puts("Error : Program 's Closing");
                    EXIT_FAILURE;
                }
                break;
            case DISPLAY: gmDisplay(&dRC);
                break;
            case EXIT: return 0;
               
            default: puts("/n Veuillez entrez une lettre correspondante");
        }
    } while (clavUtil != EXIT);
 


et par exmple lorsque je demande tout bêtemenent de initialiser mon tableau il me met ceci :

Table Initialisation
Init Ok


Choose what u want
I : Initialisation
D : Display
A : Add
E : Exit
i
Init Ok


Choose what u want
I : Initialisation
D : Display
A : Add
E : Exit
/n Veuillez entrez une lettre correspondante


Choose what u want
I : Initialisation
D : Display
A : Add
E : Exit 


Je comprends pas pk il me le met deux fois et que lors de la première il mette le switch default :(

Merci en tout cas de votre aide.
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Normal, c'est à cause du \n qui est stocké dans le buffer clavier et qui répond à la question à ta place. D'où ton problème.

A la place de ton scanf("%c",&clavUtil); fais :
char reponse[3]; //pour initialiser un nouveau tableau
...

fgets(reponse, sizeof reponse, stdin); //a la place de scanf
clavUtil=reponse[0];


Cdlt
0
URK
 
Ah oui apparement c'est bien ça ;)

tu serais m'expliquer en deux mots pourquoi ça fait ça (il stock le caractère + un espace ?)

et pour le add y a encore la même erreur mais je suppose que c'est à cause du scanf aussi

mais vu que c'est une chaine de caractère

scanf("%s", &sMsg);
                gmAdd(sMsg, &dRC);


je dois faire un strcopy ou un truc du genre ?


Merci de ton aide en tout cas :d :d :d
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > URK
 
tu serais m'expliquer en deux mots pourquoi ça fait ça (il stock le caractère + un espace ?)
En C, tout ce que tu tapes rentre dans le buffer y compris la touche entrée ('\n' après traduction par l'OS).
Donc, si pendant le scanf("%c",&clavUtil), tu tapes 'abcde' et tu valides. Le premier caractère 'a' va aller dans clavUtil, et 'b', 'c', 'd', 'e', '\n' vont aller dans le buffer clavier. Ainsi à un autre scanf, s'ils peuvent sortir, ils ne se priveront pas (les chenapans ^^).

scanf("%s", &sMsg);
Ce n'est pas bon.
Il faut mettre scanf("%s", sMsg); Pas d'esperluette (&).
Sinon petit conseil, utilise plutôt : fgets(sMsg,sizeof sMsg,stdin) (C'est plus sécurisé ;)).

gmAdd(sMsg, &dRC);
Euh, je sais pas ce que fait ta fonction ^^.
0
URK > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
gmAdd(sMsg, &dRC);
Euh, je sais pas ce que fait ta fonction ^^.


Elle place le message d'erreur dans un tableau, mais là ça va ça marche :d

En tout cas ton explication était bien clair et je comprends mieux.

Me reste plus qu'à mettre résolu ;) .

Merci encore ....
0