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 :

do while + test de caractère


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut do while + test de caractère
    Bonjour,
    j'ai un petit problème avec mon programme, il m'affiche deux fois la même ligne "sans raison", le copie colle une partie du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char lettre;
     
    while (....){
    ...
    do {
    	lettre='\0';
    	printf("Entrez une lettre : ");
    	scanf("%c",&lettre);
    } while ((lettre<97)||(lettre>122));
    ....
    }
    Les valeurs 97 et 122 se référent aux lettres a et z en ASCII.

    La première fois, il me l'affiche une fois "Entrez une lettre : " et les fois suivantes, il l'affiche 2 fois "Entrez une lettre : Entrez une lettre : ".

    Je ne comprends pas pourquoi il fait cela, pourriez-vous m'expliquer? Comment pourrais-je faire pour qu'il l'affiche une seule fois à chaque fois.

    Merci d'avance.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Il faut vider le buffer du clavier, il te reste un caractère parasite, soit le retour avec la touche Entrée ... voir dans la FAQ: Comment vider le buffer clavier ?

    Tu mets ca juste paès ton scanf et tout devrais rentrer dans l'ordre
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    C'est quand même bizarre ça, mais ça fonctionne

    Merci
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par v4np13
    C'est quand même bizarre ça, mais ça fonctionne

    Merci
    Il n'y a rien de bizarre ... quand tu tapes sur Entrée, ca envoie un caractère dans le tampon, chose tout à fait normale mais vu que tu ne lis qu'un seul caractère dans ta fonction hé bin il reste le second qui t'as servi pour valider ton choix ce qui fait que lorsque le programme de repose la question hé bien il lit la suite du tampon c'est tout
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par v4np13
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char lettre;
     
    while (....){
    ...
    do {
    	lettre='\0';
    	printf("Entrez une lettre : ");
    	scanf("%c",&lettre);
    } while ((lettre<97)||(lettre>122));
    ....
    }
    Ton code est horrible pour plusieurs raisons :
    • Indentation innommable.
    • Sortie incomplète sur stdout (pas de '\n') Il manque un fflush (stdout);
    • Usage non maitrisé de scanf() entrainant une instabilité du code.
    • Code inutilement compliqué. (lettre = getchar() aurait fait la même chose, mais avec le même défaut).
    • Test des caractères non portable. Il faut utiliser les fonctions de <ctype.h>.
    • Pas de traitement en cas d'erreur.
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Merci pout tes explication Franck.H, on ne pouvait faire plus simple

    Citation Envoyé par Emmanuel Delahaye
    Ton code est horrible pour plusieurs raisons :
    • Indentation innommable.
    • Sortie incomplète sur stdout (pas de '\n') Il manque un fflush (stdout);
    • Usage non maitrisé de scanf() entrainant une instabilité du code.
    • Code inutilement compliqué. (lettre = getchar() aurait fait la même chose, mais avec le même défaut).
    • Test des caractères non portable. Il faut utiliser les fonctions de <ctype.h>.
    • Pas de traitement en cas d'erreur.
    Molo molo Je débute, laisse moi le temps de m'y retrouver Je n'ai pas 5-20 ans ou plus de C dans la peau comme toi, seulement 1 mois.

    L'indentation, c'est normal, j'ai coupé le code qui me paraissait indispensable pour illustrer mon problème, pas besoin de vous encombrez avec les 100 autres lignes qui fonctionnent. Mais j'indente dans mes sources, pas de soucis de ce côté là.

    Le deuxième point, j'ai pas trop compris. J'ai pas mis le \n parce que je ne voulais pas aller à la ligne. fflush je ne connais pas mais je regarderai dans les manuels.

    Getchar, je ne connaissais pas non plus. Je suis vraiment dans les débuts, le reste va venir.

    Je vais regarder ce que offre la libraire ctype.h.

    Le traitement est dans les lignes de code non-publiées

    Merci à vous deux.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

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

Discussions similaires

  1. Test de caractère espace
    Par Himotep dans le forum C#
    Réponses: 13
    Dernier message: 08/05/2011, 11h26
  2. test de caractères
    Par darkwall_37 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/11/2009, 18h42
  3. Test de caractères Tedit.
    Par ornitho dans le forum Débuter
    Réponses: 7
    Dernier message: 19/11/2008, 17h07
  4. Problème de test de caractère
    Par dgac2000 dans le forum Débuter
    Réponses: 3
    Dernier message: 18/05/2008, 23h58
  5. [Système] Conseil: Variable et test de caractère
    Par mLk92 dans le forum Langage
    Réponses: 2
    Dernier message: 19/06/2007, 18h29

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