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 :

Débutant, code défectueux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Par défaut Débutant, code défectueux
    Bonjour,
    J'ai récemment commencé à étudier la programmation en C avec le livre : le langage C 2 ème édition de KERNIGHAN et RITCHIE.
    J'ai beau recopier les code fourni dans le livre ça ne fonctionne pas.
    Quand je tape EOF ça n'arrête pas la boucle while.

    Pouvez vous me dire si c'est une erreur d'écriture du livre ou bien si ça vient de moi et mon éditeur de texte svp?
    Merci

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<stdio.h>
     
    int main() {
        int c;
        c = getchar();
        while (c != EOF) {
            putchar(c);
            c = getchar();
        }
    }

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par macmad Voir le message
    Quand je tape EOF ça n'arrête pas la boucle while.
    EOF n'est pas un texte à taper (sinon la comparaison serait écrite différemment vu que ce serait une chaine) ; c'est une valeur spéciale (valant en réalité -1) qui est renvoyée par la fonction getchar() quand il n'y a plus rien à lire.
    Pour clore la saisie clavier, tu tapes "ctrl-D" (*) ce qui fera en sorte que le clavier sera considéré comme "fermé" ce qui amènera getchar() à renvoyer la valeur EOF.

    Et on place ses codes entre balises pour qu'ils soient affichés comme "code" par le forum

    (*) "ctrl-D" ce n'est pas non plus une chaine mais une combinaison de touches
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Futur Membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    EOF n'est pas un texte à taper (sinon la comparaison serait écrite différemment vu que ce serait une chaine) ; c'est une valeur spéciale (valant en réalité -1) qui est renvoyée par la fonction getchar() quand il n'y a plus rien à lire.
    Pour clore la saisie clavier, tu tapes "ctrl-D" (*) ce qui fera en sorte que le clavier sera considéré comme "fermé" ce qui amènera getchar() à renvoyer la valeur EOF.

    Et on place ses codes entre balises pour qu'ils soient affichés comme "code" par le forum

    (*) "ctrl-D" ce n'est pas non plus une chaine mais une combinaison de touches

    MERCI pour ta réponse, super rapide en plus ;-)
    ok pour le EOF, et effectivement ça marche mieux comme ça.
    Je risque de vous poser d'autres questions comme ça....

    ok pour les balises, vu l'onglet débutant en C ... pas malin j'aurais dû le lire plutôt...

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par macmad Voir le message
    Je risque de vous poser d'autres questions comme ça....
    Pas de souci, on est là pour ça.
    Voici ton code un peu optimisé....
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include<stdio.h>
     
    int main() {
    	int c;
    	while ((c=getchar()) != EOF) {
    		putchar(c);
    	}
    }
    En mettant c=getchar() directement dans l'évaluation on évite de le répéter.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Futur Membre du Club
    Homme Profil pro
    neant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : neant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Pas de souci, on est là pour ça.
    Voici ton code un peu optimisé....
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include<stdio.h>
     
    int main() {
    	int c;
    	while ((c=getchar()) != EOF) {
    		putchar(c);
    	}
    }
    En mettant c=getchar() directement dans l'évaluation on évite de le répéter.
    Oui dans le bouquin ils enchaînent comme ton code.👍
    Merci.

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Il faut lire la documentation EOF - End-of-File (stdio.h) (<- lien cplusplus.com en anglais)

    attention, c'est 1 documentation C++ : donc les entêtes C XXX.h deviennent en C++ cXXX (sans extension) (stdio.h -> cstdio, stdlib.h -> cstdlib, …)

  7. #7
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    EOF n'est pas une suite de trois caractères, mais une macro, (End Of File)
    Il serait donc préférable de trouver une autre solution pour arrêter ta boucle.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

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

Discussions similaires

  1. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  2. code pour interbase 6.0 et 6.5 de generateur
    Par tripper.dim dans le forum InterBase
    Réponses: 4
    Dernier message: 01/07/2002, 11h29
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Explorateur de code C
    Par Zero dans le forum C
    Réponses: 14
    Dernier message: 06/06/2002, 09h41
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

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