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 :

valeur de retour EOF


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 30
    Par défaut valeur de retour EOF
    Bonjour,

    Dans le livre de K&R Norme ANSI il y a un programme très simple qui est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    main ()
    {
        int c;
     
        c = getchar ();
        while (c != EOF) {
            putchar (c);
            c = getchar ();
        }
    }
    Seulement sur ma machine la valeur de EOF est -1 et par conséquent, comme getchar lit caractère par caractère quand je rentre -1, il me lit dabord '-' puis '1' et donc la condition c !=EOF est toujours vraie.

    Le programme ne termine donc pas!

    De plus dans le livre il est écrit :

    Le problème est de détecter la fin de données en entrée. La solution est que getchar retourne une valeur particulière lorsqu'il n'y a plus rien en entrée, une valeur que l'on ne puisse pas confondre avec un vrai caractère. Cette valeur s'appelle EOF ...
    On dirait qu'ils considèrent que l'entrée standart c'est un fichier!
    Or mon entrée standart c'est mon terminal. Donc a quelle moment le programme sait qu'il n'y a plus rien en entrée puisque je peux tjrs écrire dans la console?

    j'espère que vous m'avez compris! Merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Ça dépend de ton OS. CTRL-Z et CTRL-D sont les deux possibilités les plus courantes.

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    normalement, la constante EOF est prévu pour la fin d'un fichier !!! et non de la console.
    Il te reste donc trois possibilité :
    - tout mettre dans un fichier : ça ira plus vite, tu ne devra pas tout retapper à la main !!! C'est ce que tout le monde fait.
    - mettre un autre caractère pour signaler la fin de la saisie : #, @, $, €, ...
    - lire les caractères par couple.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  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 ToTo13
    normalement, la constante EOF est prévu pour la fin d'un fichier !!! et non de la console.
    Bétises...

    stdin est in flux. EOF (Acronyme mal choisi, EOR aurait évité bien des confusions...) signifie "fin de lecture". Si stdin est raccordé à une console, la façon de signaler une fin de lecture dépend du système :

    Unixoide : Ctrl-D (par défaut)
    MS-DOS/Windows : Ctrl-Z

    etc.

  5. #5
    Membre confirmé Avatar de O( N )
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 126
    Par défaut
    Merci pour vôtre réponse (Emmanuel Delahaye ) ,
    car mon ancienne prof de C avancée nous avait appris que EOF était la fin d'un fichier (pas d'un flux) .
    C'est là que l'on voit qu'il est difficile de tout connaître même dans sa partie.

  6. #6
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Sisi EOF = end of file, c'est juste que stdin et stdout sont aussi des "file"

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

Discussions similaires

  1. Valeur de retour d'une procédure stockée
    Par Rudyweb dans le forum MFC
    Réponses: 4
    Dernier message: 25/02/2005, 17h52
  2. fonction operator, valeur de retour
    Par butch dans le forum C++
    Réponses: 21
    Dernier message: 20/09/2004, 10h30
  3. [VB6] Valeur de retour pour une Form
    Par preverse dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/08/2004, 17h16
  4. Valeur de retour d'une procédure externe
    Par elekis dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 16/04/2004, 16h45
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

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