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 de fgets


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Par défaut probleme de fgets
    Bonsoir,

    question rapide! je voulais utiliser la fonction fgets pour pouvoir permettre de rentrer une ligne avec des espace.

    Je procède donc de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char saisie[30];
    fgets(saisie, sizeof saisie, stdin);
    Je n'ai pas d'erreur de compilation, tout marche bien mais lorsqu'il passe sur le fgets, il n a pas l'air de s arretter dessus et execute la suite du code apparemment ! Comme j'ai fiat un menu, le resultat est qu'il reaffiche le menu avant meme que j'ai pu saisir quoique ce soit.

    Merci pour vos réponses et bonne soirée.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    c'est surement qu'il reste des caractères dans le buffer de stdin. Essaie : Comment vider le buffer clavier ?

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Par défaut
    Exactement ca ! je savais pas qu' on devait le prendre en compte, merci beaucoup et bonne soirée !

  4. #4
    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 ceres02
    Je n'ai pas d'erreur de compilation, tout marche bien mais lorsqu'il passe sur le fgets, il n a pas l'air de s arretter dessus et execute la suite du code apparemment ! Comme j'ai fiat un menu, le resultat est qu'il reaffiche le menu avant meme que j'ai pu saisir quoique ce soit.
    Je suppose que dans le menu, il y a un scanf() ou un getchar() (ou fgetc()) qui a laissé les toilettes crades en sortant. C'est à lui de nettoyer...

    La fonction fgets() n'est pas en cause. elle fait son travail...

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    il y a un scanf() ou un getchar() (ou fgetc()) qui a laissé les toilettes crades en sortant. C'est à lui de nettoyer...
    Je ne sais pas pourquoi, mais je ne suis pas convaincu par la comparaison entre le tampon de stdin et des toilettes... Des toilettes seraient plutot un stdout, non ?

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Par défaut
    En tout cas, ca marche parfaitement, en revanche fgets rajouter un '\0' à la fin du char que je recuppère, n'est ce pas? Je voudrais pouvoir m'en debarasser ou alors pouvoir l'ajouter a ceux qui n'en ont pas, j'ai regardé du cote de strcat mais je n'y arrive pas...

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par ceres02
    En tout cas, ca marche parfaitement, en revanche fgets rajouter un '\0'
    Si le tableau de char est assez long, fgets() prend egalement en compte le retour-chariot ('\n') compris dans le fichier. Ton tableau se terminera donc par '\0''\n'. En regle generale, on remplace le '\n' par un '\0' en utilisant strchr(). Je ne vois pas l'interet de se debarasser du '\0', sauf si on travaille avec des chaines speciales, definies par exemple par une structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct
    {
       char *characters;
       size_t length;
    } string;

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Par défaut
    en fait, je fais une pseudo bibliotheque ou je peux ajouter des fichiers soit par saisie (avec les fgets) soit en utilisant un fichier qui est lue, mais dès lors un titre comme "toto" saisie en fgets n'aura pas le meme nombre de caracteres et quand je fais une recherche du titre, il ne le trouve pas avec un strcmp.
    Donc je pensais a rajouter un \0 ou a m en debarasser mais je n y arrive pas !
    quand je fais un strlen, il m affiche 16 pour celui releve avec le fgets et 15 pour celui dans le fichier.

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Par défaut
    ok c'est bon, petite erreur dans ma fonction trim !

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Par défaut
    mais juste par curiosite, on peut ajouter un \n en fin de chaine grace a la fonction strcat?

  11. #11
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par ceres02
    mais juste par curiosite, on peut ajouter un \n en fin de chaine grace a la fonction strcat?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char s[128] ="Bonjour";
    strcat(s,"\n");
    Jc

  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 ceres02
    mais juste par curiosite, on peut ajouter un \n en fin de chaine grace a la fonction strcat?
    Si il y a de la place, oui.

    Tes manips visant à supprimer le 0 (et le remplacer par quoi ?) sont douteuses. Une chaine n'est valide que si elle est terminée par un 0. Sans le 0, plus aucune fonction 'string' ne fonctionne.

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

Discussions similaires

  1. Probleme avec fgets()
    Par Piscium dans le forum C
    Réponses: 4
    Dernier message: 13/07/2010, 09h38
  2. Probleme avec fgets
    Par SAKDOSS dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 30/12/2007, 15h58
  3. probleme avec fgets et un tableau à 2 dimensions
    Par l1086 dans le forum Bibliothèque standard
    Réponses: 16
    Dernier message: 14/12/2007, 19h43
  4. probleme avec fgets
    Par loan33 dans le forum Langage
    Réponses: 2
    Dernier message: 01/12/2006, 18h24
  5. probleme avec fgets
    Par semaj_james dans le forum C
    Réponses: 3
    Dernier message: 09/12/2005, 21h00

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