IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Utiliser un caractère pour une structure de choix


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Utiliser un caractère pour une structure de choix
    Bonjour à tous, j'ai fait un petit programme très basique en somme dont le but est de trouver un nombre tirer aléatoirement. J'y est inséré 5 niveaux de difficulté, jusque là tout va bien.
    Ce que je veux rajouter maintenant c'est la possibilité de refaire une partie si on appuie sur "o" (caractère) à la fin du jeu quand on a trouvé le nombre mystère. Et là c'est le drame car mon programme ne veut pas prendre en compte cette partie de programme et le ferme tout simplement.

    Pour choisir le niveau de difficulté, j'ai mis une condition "switch", avec "case 1:" pour très facile, "case 2:" pour facile, "case 3:" pour moyen...

    Donc déjà j'aimerai savoir comment on fait un scanf de la lettre "o" (code ASCII? : tab[111]), comment doit-on la déclarer au début et est-ce que je dois faire le scanf dans la condition switch ou en dehors? Je vous ai mis en gras la partie importante que je ne comprends pas, ainsi qu'en rouge au début les explications de mon problème quant à la déclaration des caractères et je ne développe pas les cases du switch car elle marche très bien et prendraient trop de place! Voici le code, j'espère avoir été assez clair, mon problème est très simple et pas long à résoudre mais j'essaie d'être clair car ce n'est pas évident d'expliquer!!

    Merci à tous!

    Bien cordialement,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    #include <time.h>
    
    using namespace std;
    
    
    int main(int argc, char *argv[])
    {
        srand(time(NULL));
        int iNbre;  
        int iAlea1;
        int iAlea2;
        int iAlea3;  
        int iAlea4;
        int iAlea5;
        int iNiveau;
        char o; Je ne sais pas trop comment faire avec ces deux dernières lignes!
        char cCar;
           
        do
        {
        iAlea1=int(rand()%9)+1; 
        iAlea2=int(rand()%99)+1;
        iAlea3=int(rand()%999)+1;
        iAlea4=int(rand()%9999)+1;
        iAlea5=int(rand()%99999)+1;
        printf("Niveau de difficulte (1:debutant, 2:amateur, 3:moyen, 4:difficile, 5:hard)\n");
        scanf("%i",&iNiveau);
            
        switch(iNiveau)
        {           
    case 1:
    ...
    ...
    case 2:
    ...
    ...
    ...
    ...
    ...
    case 5:
    ...
    ...
     default:
       printf("Votre choix ne convient pas!\n");
       break;     
       }           
       
       
            printf("Vous pouvez continuer en tapant sur o:oui ou fermer la fenetre!\n");
             scanf("%c",&cCar);
                                       
                     }while(cCar==o);
                     
          system("PAUSE");
        return EXIT_SUCCESS;
    
       
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tu peux utiliser 'o' (simple quotes).

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 339
    Points
    2 339
    Par défaut
    Fait aussi une purge de stdin, il se peut qu'apres ton choix de niveau, il y est encore '\n', ce qui sera pris a la place de o lors de scanf("%c",&cCar);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    case 5:
    ...
    ...
    default:
    printf("Votre choix ne convient pas!\n");
    break;
    }
     
    /* Purge ici, voir faq avec 'vider buffer clavier' */
    printf("Vous pouvez continuer en tapant sur o:oui ou fermer la fenetre!\n");
    scanf("%c",&cCar);
     
    }while(cCar==o);

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour les accents qui entourent le o, j'avais oublié! J'ai également le double égal qui n'avait pas sa place ici, un simple égal suffit je crois.
    Sinon quand je lance l'application maintenant ça me donne ça :



    donc en fait il ne veut pas savoir si on continue et enchaine direct sur une autre partie.
    Donc je pense en effet que c'est une question de purge, je vais voir comment on fait, sinon j'attends vos avis!
    Merci beaucoup à tout le monde en tout cas.
    Très sincèrement

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 339
    Points
    2 339
    Par défaut
    Citation Envoyé par blairpecos Voir le message
    Merci pour les accents qui entourent le o, j'avais oublié! J'ai également le double égal qui n'avait pas sa place ici, un simple égal suffit je crois.
    Les "accent" sont des simple cote

    Quant au double egal, j'espere que tu ne parle pas de celui ci :

    Le simple egale est l'operateur d'affectation, le double egal est l'operateur de comparaison. Donc dans le code ci dessus, c'est le double egale (comparaison) qu'il faut.

    Quant a la purge du buffer clavier, je t'invite a lire ceci, cela t'aidera grandement :

    http://c.developpez.com/faq/index.ph...buffer_clavier


    Voila, bon courage pour la suite.

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    o entre guillemets simples

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ha pardon alors pour le double égal, je parlai bien de celui qui est cité dc je vais le remettre!
    Pour les accents c'est bon!
    Je vais m'occuper de la purge et je vous tien au courant....

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ai regardé les différentes manières de purger et la plus compréhensible à mon niveau semble être l'utilisation de "getchar".
    Mais je ne comprends pas comment l'utiliser, et à quel endroit l'inclure (dans le switch? Dans le premier "do"?) si quelqu'un aurait la motivation de m'expliquer ou de me montrer sur mon programme comment faire, cela me rendrait un grand service.

    Cordialement,

    Cédric.

  9. #9
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Tu peux envisager ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       do
       {
    //      ....
          printf("Niveau de difficulte (1:debutant, 2:amateur, 3:moyen, 4:difficile, 5:hard)\n");
          scanf("%i%*[^\n]%*c",&iNiveau);
    //      ....
          printf("Vous pouvez continuer en tapant sur o:oui ou fermer la fenetre!\n");
       }while(getchar()=='o');
    La modification du format du scanf permet de lire l'entier puis d'ignorer le reste de la ligne y compris le \n.
    Pour faire bien les choses , tu devrais tester le retour du scanf pour vérifier qu'on a bien entré un nombre.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            printf("Vous pouvez continuer en tapant sur o:oui ou fermer la fenetre!\n");
            scanf("%c",&cCar);
     
                     }while(getchar()=='o');

    J'ai juste fait comme cela à la fin à la fin de mon code, donc juste un getchar()=='o' et ça marche parfaitement bien, c'est ce que je voulais obtenir!
    Je remercie tous ceux ki ont pris de leur temps pour m'aider.

    Amicalement,

    Cédric.

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Une chose très importante également :

    Manifestement tu compiles en C++ (sinon ça ne pourrait pas compiler). Il faut configurer ton projet pour qu'il compile en C et non en C++, vu que c'est un code en C.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/10/2006, 13h05
  2. Réponses: 4
    Dernier message: 09/02/2006, 17h44
  3. Réponses: 1
    Dernier message: 09/02/2006, 11h03
  4. [MASM] Utiliser un .IF pour une comparaison de nombre signés
    Par Crisanar dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 24/11/2004, 16h32
  5. result: chaine de caractère pour une DLL
    Par Sephiroth Lune dans le forum Langage
    Réponses: 7
    Dernier message: 27/07/2004, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo