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 :

K&R exercice 1.6


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Par défaut K&R exercice 1.6
    Bonsoir

    Et bien voilà, j'ai débuté le C hier soir parce qu'après l'apprentissage de divers langages tel que XHTML, CSS, Javascript, PHP, etc... je me suis dit : "Et si j'apprenais à bien programmer ?"

    Du coup, j'ai acheté le K&R et j'entreprends les divers exercices...

    Arrivé à l'exo 1.6, on me demande de vérifier que l'expression getchar() != EOF vaut soit 0 soit 1. J'avoue, je n'ai pas trouvé seul et ai eu besoin de me reporter à la solution qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    /**
    * Copie l'entrée sur la sortie; seconde version
    */
     
    main()
    {
      int c;
     
      while(c = getchar() != EOF)
               printf("%d\n", c);
      printf("%d - pour EOF\n", c);
    }
    le code du chapitre associé étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
     
    /**
    * Copie l'entrée sur la sortie; seconde version
    */
     
    main()
    {
      int c;
     
      while((c = getchar()) != EOF)
              putchar(c);
    }
    J'étais parti sur des if mais ça me sortait ma phrase avec quelques lettres en moins...

    Le résultat attendu est apparemment d'avoir des 1 lorsque la fin de fichier n'est pas atteinte et un 0 lorsque c'est le cas. Mon soucis, c'est que la solution ne me donne pas ce 0. J'obtiens cinq 1 lorsque je tape "test" puis "entrée". Je suppose le "entrée" génère le cinquième 1 mais où se trouve donc le 0 ?

    Ce qui me semble flou, c'est que je ne suis pas dans un fichier mais en train de taper tout cela dans mon invite de commande donc peut-être est-ce normal...

    Je précise qu'à l'heure actuelle, je suis encore sous Windows et que je me sers du logiciel Dev-C++ pour faire tout ça...

    Voilà, vous l'avez compris, je suis super newbie en la matière mais qui ne l'a pas été un jour ?

    Au plaisir de vous lire...

  2. #2
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Salut a toi !!!

    Alors un petit truc, (extrait du man )

    fgetc() lit le caractère suivant depuis le flux stream et le renvoie sous forme d'un unsigned char, transformé en int, ou EOF en cas d'erreur ou de fin de fichier.
    getc() est équivalent à fgetc() sauf qu'il peut être implementé sous forme de macro, qui évalue l'argument stream plusieurs fois.
    getchar() est équivalent à getc(stdin).
    Donc le fait d'entrer tes caractères sous la console, c'est normal rassure toi

    Par contre suis-je le seul a trouver ce code complétement dégueulasse ???

    main() <-------- int main()
    Et surtout la condition de la boucle while. . .

    Voila, en te souhaitant bon courage pour la suite !!!

  3. #3
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Par défaut
    salut,

    Donc le fait d'entrer tes caractères sous la console, c'est normal rassure toi
    oui, ça je l'avais compris mais ce qui me gêne, c' est que je n'obtiens pas le 0 une fois que j'ai terminé de taper ces caractères... En somme, pas de détection de fin de fichier...

    Par contre suis-je le seul a trouver ce code complétement dégueulasse ???
    Non, non ! Vu que je débute, je préfère m'en tenir à l'exo tel qu'indiqué... J'ai bien vu qu'il y avait un int devant main dans les codes que je rencontre mais ça vient dans les exos suivants... Tant que je n'en connais pas la signification, je ne le mets pas mais ça va venir...

    Et surtout la condition de la boucle while. . .
    Qu'entends-tu par là ?

    Le premier code était :
    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
    16
    17
    #include <stdio.h>
     
    /**
    * Copie l'entrée sur la sortie; première version
    */
     
    main()
    {
      int c;
     
      c = getchar();
      while(c != EOF)
      {
              putchar(c);
              c = getchar();
      }
    }
    mais ils disent qu'un codeur ayant une plus grande expérience aurait écrit cette condition de façon plus concise afin qu'il n'y ait plus qu'une référence à getchar, que le code soit plus concis et que la lecture du code s'en retrouve facilitée...

  4. #4
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Par défaut
    Ah ! Merci Emmanuel... C'est bon...

  5. #5
    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 Chakra Spirit
    Ce qui me semble flou, c'est que je ne suis pas dans un fichier mais en train de taper tout cela dans mon invite de commande donc peut-être est-ce normal...
    La fin de lecture est simulée au clavier avec Ctrl-Z sous DOS/Windows et Ctrl-D sous unixoïde.

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

Discussions similaires

  1. Un cours de C/C++ avec exercices corrigés
    Par merrheim dans le forum C++
    Réponses: 65
    Dernier message: 18/01/2005, 22h30
  2. Pages d'exercices à faire pour l'autoformation ?
    Par [thebadskull] dans le forum Evolutions du club
    Réponses: 13
    Dernier message: 15/06/2004, 20h26
  3. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26

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