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 :

Caractère EOF non reconnu


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Points : 53
    Points
    53
    Par défaut Caractère EOF non reconnu
    Bonjour à tous,
    je cherche juste à lire une ligne dans stdin et de l'afficher en spécifiant les caractères \n et EOF.
    Le caractère \n est reconnu mé pas EOF.
    Pourquoi :

    Voici mon code :
    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
     
    int main ()
    {
    	char line[128];
    	char c;
    	int i=0;
    	fgets(line,129,stdin);
    	while((c=line[i])!='\0')
    	{
    		if (c=='\n') printf("saut");
    		else if (c==EOF) printf("EOF");
    		else printf("%c",c);
    		i++;
    	}	
    }
    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    il te manque des includes notamment stdio.h.
    Essayes en rajoutant au début

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <stdio.h>
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Points : 53
    Points
    53
    Par défaut
    Non c bon il sont fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <stdio.h>
    #include <stdlib.h>
    Dsl pr l'oubli

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Pour toi le caractere EOF tu le fais comment.
    Sous DOS/Windows, c'est Ctrl-Z ou Ctrl-Z<enter>
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Salut,

    man fgets :
    fgets() lit au plus size - 1 caractères depuis stream et
    les place dans le buffer pointé par s. La lecture
    s'arrête après EOF ou un retour-chariot. Si un retour-
    chariot (newline) est lu, il est placé dans le buffer. Un
    caractère nul '\0' est placé à la fin de la ligne
    Donc si à la fin tu fais "Entrée" il y aura '\0' comme dernier caractère et pas EOF
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Points : 53
    Points
    53
    Par défaut
    Médinoc : qu'est ki doit etre un int ? j'ai essayé de faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((int)c==EOF) printf("EOF");
    mais ca marche pas mieu

    sorry60 : pr moi stdin est une redirection : $./monprog < test
    Et dans mon fichier (txt) test il n'y a qu'une ligne sans \n à la fin de celle ci
    Donc normalement EOF devré être à la fin de cette ligne

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    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
    int main ()
    {
       char line[128];
       int c; //<== il FAUT que c soit un int pour justement distinguer le EOF
      // je ne suis pas sur que la promotion de c dans if ( (int) c == EOF) fonctionne correctement.
       int i=0;
       fgets(line,129,stdin);
       while((c=line[i])!='\0')
       {
          if (c=='\n') printf("saut");
          else if (c==EOF) printf("EOF");
          else printf("%c",c);
          i++;
       }   
    }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Points : 53
    Points
    53
    Par défaut
    Je l'ai testé et rien ne change
    Ya une truc ke je comprend pas !!!!!
    Voici mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Une phrase bidon à analyser.
    normalement pr la machine cette phrase est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Une phrase bidon à analyser.EOF
    donc normalement le fgets récupère le tout et y colle un \0 à la fin
    Alors pkoi ca marche pas ?
    Ou alors c moi ki comprend pas tout???

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    le EOF n'est jamais stocké par fgets().
    il est retourné par fgetc(), par contre.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Points : 53
    Points
    53
    Par défaut
    j'ai faire un printf du retour de fgets et il d'agit de ma chaine de caractère alors kel et fini par EOF normalement
    Comprend plus rien !!!!!!!!!!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par rod59
    ok pr ca suis d'accord!
    mé fgets retourne un char* alors que EOF est un int
    comment je fé pour faire le test?
    Tu lis la doc de fgets() et tu constates que en cas de fin de lecture, fgets() retourne NULL.
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par rod59
    j'ai faire un printf du retour de fgets et il d'agit de ma chaine de caractère alors kel et fini par EOF normalement
    Comprend plus rien !!!!!!!!!!
    Apprends à utiliser fgets() correctement :

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    J'avais lu en diagonale, je croyais que le posteur utilisait fgetc
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 101
    Points : 53
    Points
    53
    Par défaut
    Tu a raison Emmanuel, il suffissait de comprendre fgets.
    J'ai resolu mon pb.
    Donc pr ceux que ca interresse:
    fgets retourne bien NULL quand il arrive a la fin
    Le truc kil fo comprendre c que EOF n'est pas trouvé quand on arrive dessus mais quand on l'a passé
    Voilà
    Merci à tous en tout k!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par rod59
    fgets retourne bien NULL quand il arrive a la fin
    Oui.
    Le truc kil fo comprendre c que EOF n'est pas trouvé quand on arrive dessus mais quand on l'a passé
    Exactement.
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. [XL-2002] Caractère non reconnu
    Par louminor dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 20/01/2011, 13h25
  2. Load data infile caractères non reconnu
    Par didou70 dans le forum Débuter
    Réponses: 1
    Dernier message: 14/05/2009, 15h10
  3. Caractère "_" non reconnu dans un like
    Par lodan dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/04/2007, 09h39
  4. Creation de table, caractère non reconnu
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/02/2004, 13h28
  5. xslt_create() non reconnu
    Par BRAUKRIS dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 11/12/2003, 14h43

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