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 :

for passe la boucle deux par deux


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 27
    Points : 30
    Points
    30
    Par défaut for passe la boucle deux par deux
    Bonjour,

    j'ai un probleme avec une boucle for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(iteration=0; iteration<10;iteration++){
            printf("donnez une lettre:\n");
            lettre=getchar();
            }
    La boucle fait deux tour d'un coup à chaque fois. Je ne peux donner une lettre qu'une fois sur deux.

    Savez-vous d'où vient ce problème?

  2. #2
    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
    Lorsque tu rentre un nouveau caractère, en fait tu tapes deux fois sur le clavier : une fois pour le caractère et une fois sur return. Le buffer clavier contient alors le caractère ET '\n'.
    Le premier getchar() lit le caractère et le second le '\n' et n'a donc pas besoin de demander que tu tapes un nouveau caractère.
    Ces deux caractères lus, le buffer clavier est vide et le processus recommence.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 27
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup,

    j'ai donc mis un deuxième getchar() et ça marche, mais existe t'il une méthode plus élégante?

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Citation Envoyé par cobe91 Voir le message
    Merci beaucoup,

    j'ai donc mis un deuxième getchar() et ça marche, mais existe t'il une méthode plus élégante?
    Tu peux utiliser fgets() pour lire une ligne puis traiter chaque caractères.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 33
    Points : 38
    Points
    38
    Par défaut
    Salut,

    Tu peux coder une fonction qui test ton caractère et qui en re-scan un si c'est '\n'

  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
    Il n'y a pas plus simple, mais on peut sécuriser la saisie. Avec le second getchar(), tu peux avoir des ennuis. Par exemple si l'utilisateur tape directement ''return'' ou ''abcreturn''.

    Tout dépend des contraintes que tu veux imposer sur la frappe des caractères.
    Par exemple si tu veux ignorer les lignes vides (return seulement) et ne prendre que le premier caractère d'une ligne tapée par l'utilisateur en ignorant les autres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            while((lettre=getchar())=='\n'); // ignore les lignes vides
            while(getchar() != '\n');        // vide le reste de la ligne
    donnera
    ''return'' -> ignoré
    ''1return'' ->lettre == '1'
    ''345return'' -> lettre == '3'
    ''return'' -> ignoré
    '' 678return'' -> lettre == ' '
    Si en plus, tu imposes d'obtenir une lettre, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <ctype.h>
    ...
            while(!isalpha(lettre=getchar())); // sélectionne les lettres majuscules ou minuscules
            while(getchar() != '\n'); // vide le reste de la ligne
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

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

Discussions similaires

  1. clé d'un Map formée par deux attributs
    Par kass28 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 14/05/2014, 09h18
  2. Difference entre deux annees, deux mois, deux jours
    Par kroma23 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2012, 20h27
  3. Lire fichiers deux par deux dans dossier
    Par Newenda dans le forum MATLAB
    Réponses: 13
    Dernier message: 12/05/2009, 09h50
  4. [JSTL] boucle forEach pour deux liste en même temps
    Par ruud002 dans le forum Taglibs
    Réponses: 1
    Dernier message: 28/09/2006, 15h54
  5. [math] equ sinusoide passant par deux points
    Par ddams dans le forum Mathématiques
    Réponses: 11
    Dernier message: 24/05/2003, 14h12

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