Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/09/2006, à 20:28

blitz

[resolu] switch() et scanf()

Slt le forum,
je suis en train d'ecrire un petit programme de gestion en C,
et j'ai qq inconvenients, 2 problemes se posent a moi
j'ai ecrit un menu de navigation tout simple qui s'utilise avec switch()

                do
                {
                        system("clear");
                        printf("----------------------\n\n");

                        /* on affiche le registre traite */
                        printf("Registre : ");
                        puts(Pfile);
                        printf("\n\n");

                        printf("--------------------------------------\n");
                        printf("1. ==> Changer de registre\n");
                        printf("2. ==> Entrer un nouvel utilisateur\n");
                        printf("3. ==> Rechercher un utilisateur\n");
                        printf("4. ==> Consulter une fiche utilisateur\n");
                        printf("5. ==> Modifier une fiche utilisateur\n");
                        printf("----------------------------------------");
                        printf("\nQ\\q pour quitter");
                        printf("\n\n");

                        fflush(stdin);                  /* On vide le buffer d'entree */
                        printf("Saisir la commande: ");
                        scanf("%c", &c);

                        switch (c)
                        {
                                case '1' :
                                                Data(Pfile);
                                                break;
                                case '2' :
                                                NewUser(Pfile);
                                                break;
                                case '3' :
                                                SeekUser(Pfile);
                                                break;
                                case '4' :
                                                ViewUser(Pfile, 0);
                                                break;
                                case '5' :
                                                ModifyUser(Pfile, 0);
                                                break;
                                case 'Q' :
                                                return 0;

                                case 'q' :
                                                return 0;
                                default :
                                                printf(" Choix incorrect!\n");
                                                getch();
                                                break;
                        }
                } while (c != 'Q' && c != 'q');

voila, 2 problemes s'imposent a moi,
1) j'ai mis dans default : printf("Choix incorrect");
pour que le programme affiche qd une saisie n'est pas valide
cependant, il s'affiche d'emblée, sans qu'aucun choix ne soit fait,
comment faire pour qu'il ne s'affiche que qd un choix a ete fait et qu'il est incorrect?
2) j'ai utilisé scanf("%c", c); pour la saisie du caractere variable de switch, et ca ne fonctionne pas,
je ne sais pas trop pkoi... j'ai ensuite utilisé c = getchar(); et la plus de probleme,
j'aimerais tout de mm comprendre pkoi scanf fonctionne mal,
si qqun peut m'aider....

Dernière modification par blitz (Le 05/09/2006, à 20:56)

Hors ligne

#2 Le 04/09/2006, à 21:48

mik90

Re : [resolu] switch() et scanf()

Je suis pas très fort en C, mais... c'est exprès que tu a mis deux fois la même suite d'instructions ?

                    printf("\n\n");

                        fflush(stdin);                  /* On vide le buffer d'entree */
                        printf("Saisir la commande: ");
                        scanf("%c", &c);

                        switch (c)
                        {
                                case '1' :
                                                Data(Pfile);
                                                break;
                                case '2' :
                                                NewUser(Pfile);
                                                break;
                                case '3' :
                                                SeekUser(Pfile);
                                                break;
                                case '4' :
                                                ViewUser(Pfile, 0);
                                                break;
                                case '5' :
                                                ModifyUser(Pfile, 0);
                                                break;
                                case 'Q' :
                                                return 0;

Dernière modification par mik90 (Le 04/09/2006, à 21:48)


Micky aka mik90
Ubuntueros depuis Breezy Badger (2005), Linuxien depuis Mandrake 8.2 (2002), Geek depuis la fin du monde (2001), Informaticien depuis Windows 98SE (1999)
-----
Config' : Acer Aspire 9300 - AMD Turion 64x2, Ram 2Gb, GeForce 7300

Hors ligne

#3 Le 04/09/2006, à 21:59

blitz

Re : [resolu] switch() et scanf()

loool non dsl c moi qui ai mal copié, jviens de corriger ca, le bon code est visible mnt!

Hors ligne

#4 Le 04/09/2006, à 22:38

PierreAd

Re : [resolu] switch() et scanf()

En revanche tu as dû supprimer par la même occasion la fin de ton post tongue

Hors ligne

#5 Le 05/09/2006, à 12:55

mik90

Re : [resolu] switch() et scanf()

lol


Micky aka mik90
Ubuntueros depuis Breezy Badger (2005), Linuxien depuis Mandrake 8.2 (2002), Geek depuis la fin du monde (2001), Informaticien depuis Windows 98SE (1999)
-----
Config' : Acer Aspire 9300 - AMD Turion 64x2, Ram 2Gb, GeForce 7300

Hors ligne

#6 Le 05/09/2006, à 18:58

blitz

Re : [resolu] switch() et scanf()

voila je viens de recoriger, mnt le post est au complet et le code est correct,
enfin jveux dire que c celui de ma source quoi , lol

Hors ligne

#7 Le 05/09/2006, à 19:09

Balkoth

Re : [resolu] switch() et scanf()

Bonjour,

l'utilisation de scanf() avec %c n'est pas très intuitive, essaie avec scanf("%s", &c);

Hors ligne

#8 Le 05/09/2006, à 19:31

blitz

Re : [resolu] switch() et scanf()

heu càd?
enfin soit , j'ai essayé, et ca ne change rien, on dirait que la variable c ( celle de switch() ) n'est pas affectée,
c'est bizarre non?

Hors ligne

#9 Le 05/09/2006, à 19:54

Balkoth

Re : [resolu] switch() et scanf()

Euh je viens de tester ton prog (en mettant des printf dans le case et en sortant le clear de laboucle pour voir quelque chose) et ça marche :

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char c;
                        system("clear");
	do
                {
                        printf("----------------------\n\n");

                        /* on affiche le registre traite */
                        printf("Registre : ");
                        /*puts(Pfile);*/
                        printf("\n\n");

                        printf("--------------------------------------\n");
                        printf("1. ==> Changer de registre\n");
                        printf("2. ==> Entrer un nouvel utilisateur\n");
                        printf("3. ==> Rechercher un utilisateur\n");
                        printf("4. ==> Consulter une fiche utilisateur\n");
                        printf("5. ==> Modifier une fiche utilisateur\n");
                        printf("----------------------------------------");
                        printf("\nQ\\q pour quitter");
                        printf("\n\n");

                        fflush(stdin);                  /* On vide le buffer d'entree */
                        printf("Saisir la commande: ");
                        scanf("%s", &c);

                        switch (c)
                        {
                                case '1' :
                                                printf("\tData\n");
                                                break;
                                case '2' :
                                                printf("\tNewUser\n");
                                                break;
                                case '3' :
                                                printf("\tSeekUser\n");
                                                break;
                                case '4' :
                                                printf("\tViewUser\n");
                                                break;
                                case '5' :
                                                printf("\tModifyUser\n");
                                                break;
                                case 'Q' :
                                                return 0;

                                case 'q' :
                                                return 0;
                                default :
                                                printf(" Choix incorrect!\n");
                                                /*getch();*/
                                                break;
                        }
                } while (c != 'Q' && c != 'q');
	return 0;
}

Tu as bien déclaré c en tant que char ?

Sinon, avec scanf("%c", &c); ça ne fonctionne pas en effet.

Pour la différence entre %c et %s, je te renvoie au man :

man scanf a écrit :

s      Correspond  à  une séquence de caractères différents des caractères blancs. Le pointeur correspondant doit être du type
              char *, et la chaine doit être assez large pour accueillir toute la séquence, ainsi que le caractère NUL final. La con‐
              version s’arrête au premier caractère blanc, ou à la longueur maximale du champ.

       c      Correspond  à une séquence de width caractères (par défaut 1). Le pointeur associé doit être du type char *, et il doit
              y avoir suffisament de place dans la chaîne pour tous les caracteres. Aucun caractère NUL final n’est ajouté.  Les car‐
              actères blancs de début ne sont pas supprimés. Si on veut les éliminer, il faut utiliser un espace dans le format.

Hors ligne

#10 Le 05/09/2006, à 20:55

blitz

Re : [resolu] switch() et scanf()

re
voila en effet c etait declaré en int, ca m'etait completement sorti de la tete,
et il semblerait que les 2 erreurs celle du scanf() et le default: du switch() etaient liees,
pourquoi exactement, je ne suis pas encore assez expert en C pour l'expliquer,
si qqun le peut, j'serai curieux de comprendre, en attendant mon probleme est RESOLU! merci bcp

Hors ligne