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 :

Problème avec boucle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut Problème avec boucle
    Bonjour,
    je voulais faire un petit programme qui attend la saisie d'un caractère, tant qu'on a pas entré 10 caractères.
    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
    #include <stdio.h>
     
    int main()
    {
    	int	i=0;
    	char	car = ' ';
     
    	do
    	{
    		car = getchar ();
    		i ++;
    	}
    	while (i != 10);
    getchar();
    return 0;
    }
    mais après que je tape 6 caractères je sort de la boucle ..
    où est le problème ? Est ce qu'il compte aussi l'Entrée que je tape ?
    Merci d'avance ..

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Kai,

    Oui, TOUS les caractères entrés sont pris en compte.

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    Bonjour,
    je fais comment alors ?

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Mei,
    Citation Envoyé par Elaich Voir le message
    Bonjour,
    je fais comment alors ?
    A toi d'intercepter les caractères que tu ne veux pas prendre en compte (en clair, ne pas incrémenter ton compteur i si tu ne veux pas d'un caractère).

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Par défaut
    En gros là, le caractère que tu souhaites ne pas intercepter et la celui inscrit quand tu presse la touche Enter. En ascii il équivaut au nombre 10.
    Donc il te suffit de rajouter une condition avant d'incrémenter.
    Elle sera la suivante: Si la valeur numérique du caractère intercepté est différente de 10 j'incrémente.
    En code ça se traduit comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if((int)car!=10)
             i++;
    Cependant ce code n'est valide que si ton invité de commande travail avec le codage ASCII, car sinon la valeur 10 peut représenter un tout autre caractère.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Gae,
    Citation Envoyé par Grifos Voir le message
    En gros là, le caractère que tu souhaites ne pas intercepter et la celui inscrit quand tu presse la touche Enter. En ascii il équivaut au nombre 10.
    Donc il te suffit de rajouter une condition avant d'incrémenter.
    Elle sera la suivante: Si la valeur numérique du caractère intercepté est différente de 10 j'incrémente.
    En code ça se traduit comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if((int)car!=10)
             i++;
    Cependant ce code n'est valide que si ton invité de commande travail avec le codage ASCII, car sinon la valeur 10 peut représenter un tout autre caractère.
    Non, il s'agit de CR (Carriage Return), code = 13, et non de LF (Line Feed), code = 10


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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Elaich Voir le message
    je voulais faire un petit programme qui attend la saisie d'un caractère, tant qu'on a pas entré 10 caractères.
    On ne sait pas faire ça en C standard.
    <...>
    mais après que je tape 6 caractères je sort de la boucle ..
    où est le problème ? Est ce qu'il compte aussi l'Entrée que je tape ?
    Ce code n'est pas portable Il faut utiliser '\n' et rien d'autre.

    Tu devrais étudier les comportement de getchar () (fgetc(stdin)) qui ne fait pas du tout ce que tu crois :

    http://emmanuel-delahaye.developpez.com/notes.htm#fgetc

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

Discussions similaires

  1. [batch] problème avec boucle for
    Par TanEk dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 22/04/2008, 14h41
  2. Problème avec boucle
    Par tahoser dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/01/2008, 09h59
  3. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 09h52
  4. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26
  5. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39

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