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 :

probleme de gestion de boucle infinie


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Points : 70
    Points
    70
    Par défaut probleme de gestion de boucle infinie
    Bonjour,

    Voici mon problème j'aimerais savoir si quelque'un pourrait m'aider ! j'aimerais savoir comment faire pour vérifier que l'utilisateur à cette partie du code rentre bien un chiffre et rien d'autre ???(ici en outre il s'agit d'un switch ) ! Je n'ai pas mis le code complet mais juste la partie que j'aimerais tester. Si il le faut dite le moi je posterais le reste du code...
    J'avais penser à une methode avec le code ASCII mais je ne voit pas comment faire ?



    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
     
     
    printf("             ===Menu===             \n");
    printf("                                    \n");
    printf(" 1. Regle du jeu                    \n");
    printf(" 2. Savoir le nombre de case restant\n");
    printf(" 3. Charger la partie               \n");
    printf(" 4. Jouer                           \n");
    printf(" 5. Afficher la grille              \n");
    printf(" 6. Afficher la solution            \n");
    printf(" 7. Effectuer une correction        \n");
    printf(" 8. Sauvegarder                     \n");
    printf(" 9. Quitter                         \n");
    printf(" 0. Nouvelle grille                 \n");
    printf("                                    ");
    printf("\n");
    printf("Votre Choix?");
    scanf("%ld",ChoixMenu);
    printf("\n");

  2. #2
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    isdigit() peut-etre ?

  3. #3
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    si tu utilises un switch, il suffit de tester tous le scas, puis d'utiliser default qui sera utilisé quelques soient les touches que l'utilisateur à utiliser :

    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
    ok = false
    while (!ok)
    {
     printf(...tout le menu...);
     scanf("%ld",ChoixMenu); // avec ChoixMenu un pointeur !
     
     switch
     {
      case 1 :
       break;
      case 2 :
       break;
      case default :
       // Si aucun des choix n'a été pris ci-dessus, alors on rentre forcément ici
       break;
     }
    }

  4. #4
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Salut, tu peux faire fgets + strtol par exemple, et avec la valeur de retour de strtol tu peux savoir si c'est bien un chiffre que l'utilisateur a rentré !

    Bon courage !

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Mindiell
    si tu utilises un switch, il suffit de tester tous le scas, puis d'utiliser default qui sera utilisé quelques soient les touches que l'utilisateur à utiliser :

    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
    ok = false
    while (!ok)
    {
     printf(...tout le menu...);
     scanf("%ld",ChoixMenu); // avec ChoixMenu un pointeur !
     
     switch
     {
      case 1 :
       break;
      case 2 :
       break;
      case default :
       // Si aucun des choix n'a été pris ci-dessus, alors on rentre forcément ici
       break;
     }
    }
    Tu as essayé de saisir une lettre ?

    La seule méthode simple est celle proposé par GyZmoO

  6. #6
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Je serais partant pour fgetc et isdigit. Comme fgetc retourne un int, s'il est entre 48 et 57, isdigit est facultatif.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Points : 70
    Points
    70
    Par défaut
    Merci pour vos réponses rapide !
    Cependant j'ai un peu de mal encore donc il se trouve que cette fonction qui me permet de tester si l'utilisateur a rentrer un chiffre ou une lettre devrait revenir trés souvent dans mon programme ! Je vient d'essayer alors avec isdigit() ce qui donne :

    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
     
    printf("Votre Choix?");
     
    scanf("%c",&valeur_entree);
    valeur_entree=getchar();                                                         
    valeur_de_retour_de_isdigit = isdigit(valeur_entree);
     
    do
    {
    if(valeur_de_retour_de_isdigit == 0)
      {
      printf("Veuillez entrer un chiffre\n");
      }
    else 
      {
      valeur_entree=ChoixMenu;
      scanf("%ld",ChoixMenu);
      printf("\n");
      }
    }while(valeur_de_retour_de_isdigit !=0);
    cependant en faisant cela il me dit toujours veuillez entrer un chiffre ?!
    Vous pensez que c'est plus simple en utilisant fgets() + strtol je m'en vais essayer de ce pas ! Cependant si vous trouvez comment faire avec isdigit() ou j'ai du faire une erreur ça m'aiderait bien !

  8. #8
    Membre habitué Avatar de semaj_james
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Points : 139
    Points
    139
    Par défaut
    tu peux faire aussi avec des lettres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int c;
     
    while((c=getchar())!=EOF)
       {
       switch(c){
          case '0': printf("le %d a ete tape\n",c);
                    break;
          case '1': printf("le %d a ete tape\n",c);
                    break;
         case 'a': printf("le %d a ete tape\n",c);
                    break;
       }
    }

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Points : 70
    Points
    70
    Par défaut
    Merci pour votre aide j'ai finalement réussi a résoudre mon problème en partant sur effectivement fgets + strtol sa me sembler un peu compliquer mais finalement tout est bien qui fini bien !!!

    Merci !

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

Discussions similaires

  1. probleme de boucle infini
    Par bentley71de dans le forum Débuter
    Réponses: 7
    Dernier message: 02/09/2008, 16h23
  2. probleme avec une boucle infinie
    Par hunter99 dans le forum C++
    Réponses: 3
    Dernier message: 27/12/2007, 00h37
  3. Diminuer la taille d'un code et probleme boucle infini
    Par Alucard9800XT dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/06/2007, 12h42
  4. Probleme de boucle infini
    Par Premium dans le forum C++
    Réponses: 4
    Dernier message: 29/03/2007, 23h10
  5. Probleme Boucle infinie Recordset.movenext "muet"?
    Par shub dans le forum VBA Access
    Réponses: 7
    Dernier message: 14/06/2006, 14h22

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