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 :

Le scanf de mes rêve !!!


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 4
    Par défaut Le scanf de mes rêve !!!
    Satané fonction scanf, bien pratique mais assez rebutante quand on débute et que l'on vit au dépend de ces quelques inconvénients ....

    J'ai un petit problème d'ailleurs :

    lors de son utilisation multiple dans un programme, la mémoire tampon ne se vide pas toute seule et faire un flushall() avant chaque scanf me fait écrire ce message :

    Y a t-il un autre moyen de ce servir de scanf sans avoir à l'encombré de fonctions de ce genre ?

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut scanf de tes rêves
    bien le bonjour,

    bah, ton rêve ne se réalisera pas comme tu le voudras :

    soit tu accompagnes chaque scanf de son fflush(stdin); ou mieux (merci haypo et la faq) de son while((c=getchar())=='\n'); soit tu utilises autre chose que le scanf : fgets par exemple.

    dsl.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 4
    Par défaut
    Effectivement, seulement le fgets renvoie le curseur à la ligne ....

    Mmmmm, pas cool pour la saisie de la variable .... mais merci pour l'info...

    Quand tu parle de fflush, c'est à dire flushall(), ? non ?

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Salut !

    En général, j'utilise après mes scanf toujours la macro getchar(). On repart après sur des bases plus saines !

    @ ++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  5. #5
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut fflush et fgets
    Bien la bonne après-midi,

    si tu ne saisis qu'un caractère tu peux toujours utiliser getche() pour ne pas aller à la ligne.

    mais si ton seul soucis est de rester sur la ligne, gotoxy(_,_); wherex(); wherey(); et conio.h t'aideront.

    rien que d'après le nom, fflushall paraît un peu bourrin. fflush tout court permet de cibler le tampon à vider - ici stdin

  6. #6
    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 Re: Le scanf de mes rêve !!!
    Citation Envoyé par Spirit007
    Satané fonction scanf, <...> lors de son utilisation multiple dans un programme, la mémoire tampon ne se vide pas toute seule et faire un flushall() avant chaque scanf <...> Y a t-il un autre moyen de ce servir de scanf sans avoir à l'encombrer de fonctions de ce genre ?
    Il ne faut pas utiliser scanf() sur autre chose que des entrées formattées. Pour les entrées 'humaines', le mieux est fgets(). Comme par miracle, les inconveniants que tu cites n'existent plus... Cependant, bien lire la doc de fgets().

  7. #7
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2003
    Messages : 65
    Par défaut
    pour vider le tampon, hyapo suggere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int c; 
    c = getchar(); 
    if (c != '\n') while (getchar() != '\n'); /* mange le tampon */
    et non pas

    while((c=getchar())=='\n');

    fflush n est definie que pour un flux sortant? j ai jamais entendu ca...

    mobi38

  8. #8
    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 Re: fflush et fgets
    Citation Envoyé par khayyam90
    si tu ne saisis qu'un caractère tu peux toujours utiliser getche() pour ne pas aller à la ligne.

    mais si ton seul soucis est de rester sur la ligne, gotoxy(_,_); wherex(); wherey(); et conio.h t'aideront.

    rien que d'après le nom, fflushall paraît un peu bourrin. fflush tout court permet de cibler le tampon à vider - ici stdin
    Attention, ces fonctions ne sont pas standard.
    D'autre part, fflush() n'est spécifié par la norme que pour les flux sortants.

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 5
    Par défaut
    le plus propre je pense est d'utiliser une boucle while(c = getchar() != '\n') apres chaque saisie qu'elle soit bon ou erronée...
    Ainsi tu cree une tite fonction Vider_Buffer() et voila hop

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 4
    Par défaut
    Dac, je suis averti maintenant... cool le lien pour le faq , cela répond à bon nombre de question utile ....

    J'ai de quoi faire alors avant de bien saisir l'utilisation du fflush ....(FAQ)

    La fonction fgets résolvera sans doute mes problèmes ...

  11. #11
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 379
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mobi38
    fflush n est definie que pour un flux sortant? j ai jamais entendu ca...
    fflush sert à vider un buffer de sortie et à écrire immédiatement ces données. Il n'a donc rien à voir avec une fonction qui servirait à annuler le contenu d'un buffer d'entrée, c'est pas son rôle.

    Citation Envoyé par Emmanuel Delahaye
    Peu importe, c'est dans la norme.
    Plus important encore, utiliser fflush(stdin) est une extension de Borland, qui marche peut-être sous Visual, aucune idée, mais qui ne marche pas ailleurs, notamment gcc, Linux... Donc il ne faut PAS utiliser fflush(stdin).

  12. #12
    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 GLDavid
    En général, j'utilise après mes scanf toujours la macro getchar(). On repart après sur des bases plus saines !
    Avec fgets(), pas besoin de cette bidouille (sauf si la chaine de destination a saturé).

  13. #13
    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 toutchak
    fflush(stdin)
    je crois que c pas ansi dc ....
    On se tue à dire que ce n'est pas standard.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 4
    Par défaut
    Ok, me voila bien averti quant à l'utilisation de fflush, les liens sont cool.
    thanks.
    8)

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

Discussions similaires

  1. Recherche de l'éditeur de mes rêves
    Par lamasse dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 16/02/2006, 13h31
  2. Rave Report, loin de mes rèves ...
    Par Wilco dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/04/2004, 16h15
  3. que deviennent mes accents ?!
    Par petitdns dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/11/2002, 09h32
  4. Réponses: 6
    Dernier message: 10/09/2002, 03h35
  5. Stocker mes données
    Par Le Fou dans le forum C++Builder
    Réponses: 23
    Dernier message: 05/07/2002, 15h02

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