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 avec gets - On n'a pas le temps de saisir la chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut Probleme avec gets - On n'a pas le temps de saisir la chaine
    Bonjour,

    Je fais un petit exercice de saisie de chaine et de glissement de tableau.
    Le programme se compil sans problème, mais lors de l'exécution, il n'exécute pas la fonction GETS.
    Il va directement à la fin ...

    Et donc, le printf "Phrase introduite : %s" ne donne rien
    Compilateur: Code::Blocks

    Source C:
    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
    #include <stdio.h>
    #include <ctype.h>
    #include <string.h>
     
    #define LEN 80
     
     
    int main(void){
        char tab_phrase_introduite[LEN] = "\0";
        char tab_phrase_cryptee[LEN] = "\0";
        char choix;
     
        printf("Cryptage d une phrase \n");
        printf("===================== \n");
        printf("Choisissez le type de cryptage: \n");
        printf("[A]uguste,[H]elene,[C]esar,a[V]ocat,[R]ot13,h[E]rge ");
        scanf("%c", &choix);
        printf("\n");
     
        printf("choix = %c\n", choix);
     
       choix = toupper(choix);
        printf("choix = %c\n", choix);
     
        printf("Phrase a crypter : ");
        gets(tab_phrase_introduite);
     
        printf("\n");
     
        printf("Phrase introduite : %s\n", tab_phrase_introduite);
     
        return 0;
    }
    Merci à vous

    Thomas

  2. #2
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Par défaut
    Il faut s'assurer que stdin est vide avant de lancer gets sinon il se contentera de lire ce qu'il reste dedans.

    Ici le scanf ne consomme pas tout les caractères de stdin (notamment les retours chariots et à la ligne) donc gets les consomme et passe à la suite.

    Tu doit vider stdin avant je te laisse te renseigné la dessus notamment dans la FAQ

  3. #3
    Expert confirmé
    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
    Par défaut
    Après le scanf("%c",..), il reste dans le buffer clavier le '\n' qu'on a tapé pour terminé l'entrée du caractère. C'est lui qui est alors lu par le gets().

    1- Après le scanf("%c",..), vider le buffer clavier :
    - voir la Comment vider le buffer clavier ?
    - Autre alternative , compléter ce format pour éliminer le reste de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%c%*[^\n]%*c",....)
    2 - ne pas utiliser gets(), mais fgets(). Voir la Pourquoi gets est-elle dépréciée en faveur de fgets ?

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut
    En utilisant une vidange du buffer (reférencé ci-dessus), je n'ai plus ce problème
    maintenant, on va voir un peut plus loin dans le développement

    merci

    T.

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

Discussions similaires

  1. Un include avec GET qui ne fonctionne pas :s
    Par PMulE dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2012, 20h01
  2. probleme avec get en java
    Par y_chafaqi dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 12/02/2010, 22h47
  3. Probleme avec fread ou fwrite.. binaire pas lisible ?
    Par titimoi dans le forum Débuter
    Réponses: 16
    Dernier message: 16/01/2009, 13h14
  4. [PHP-JS] Probleme avec onchange qui ne redirige pas
    Par Greggggggg dans le forum Langage
    Réponses: 11
    Dernier message: 28/07/2006, 12h43

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