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 :

Entrées et sorties de caractères K&R


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Entrées et sorties de caractères K&R
    Bonjour à tous !

    Je suis en train de lire le livre de K&R ( Le langage C norme ANSI 2ème édition),
    et me voilà à la page 17 chapitre : « compter les caractères ».

    Il y a donc quelque chose que je ne saisis pas. Après de multiples essais en tous genres, je vous recopie le code écrit tel quel dans le livre qui me pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     int main(int argc, const char * argv[]) {
     
        double nc;
     
        for ( nc = 0; getchar() != EOF; nc++)
            ;
        printf("%.0f\n", nc);
    }
    Et ça ne me donne absolument rien, alors que ça serait censé compter les caractères, si j'ai bien saisi ?

    Et j'aimerais comprendre avant de m'avancer plus dans le bouquin

    J'utilise " Xcode " sur mac.


    Merci d'avance pour vos réponses.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je crois avoir compris mais pas sur :o

    Je m'expliques en faite j'avais pas bien saisi que le Printf étais en dehors de la boucle donc temps que getchar n'avait pas reçu EOF il allait continuer" d'attendre des frappes clavier " est-ce bien ça ?
    Mais alors mon problème si c'est bien ca est que sous Xcode je ne trouve pas la combinaison pour EOF , j'ai essayé cmd d, z, etc etc mais rien ne me fait terminer le programme ?

    Merci

  3. #3
    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
    Quelqu'un a eu le même problème et posé la même question (en Anglais).
    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.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je te remercie pour le lien,

    la solution était bien "ctrl d"

    Merci!

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'aimerai avoir, si vous avez 5 minutes svp une explication sur un code que je lis et relis depuis cette après midi sans comprendre comment ça peut fonctionner ....

    Voila le 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    int main(int argc, const char * argv[]) {
     
        int c;
        int espace;
     
        espace = 0;
        while((c = getchar()) != EOF)
        {
           if(c == ' ')
            {
                if(espace == 0)
                {
                    espace = 1;
                    putchar(c);
                }
            }
     
            /* We haven't met 'else' yet, so we have to be a little clumsy */
            if(c != ' ')
            {
                espace = 0;
                putchar(c);
            }
        }
     
        return 0;
     
    }

    Donc voila le code fonctionne parfaitement.
    Mais je n'arrive pas à saisir comment ça peut marcher...

    Si vous voulez bien m éclaircir sur comment ça peut donc supprimer les espace en trop pour n'en laisser qu'un car je ne vois pas ..

    Merci d'avance

  6. #6
    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
    Pour commencer, ce code, qu'est-il censé faire? Car ce qu'il a l'air de faire (juste en lisant le code), c'est sortir le texte entré sans moins les espaces redondants (au premier espace rencontré, il règle un flag indiquant de sauter les espaces suivants; ce flag est remis à zéro pour chaque caractère non-espace).
    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.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Pour commencer, ce code, qu'est-il censé faire? Car ce qu'il a l'air de faire (juste en lisant le code), c'est sortir le texte entré sans moins les espaces redondants (au premier espace rencontré, il règle un flag indiquant de sauter les espaces suivants; ce flag est remis à zéro pour chaque caractère non-espace).
    Oui c'étais bien ça, j'ai fini par comprendre ce qui me bloquais, j'essaie d'expliquer brièvement si jamais y en a qui ont comme moi du mal à comprendre ce qui une fois qu'on le sait est logique..

    en fait je n'avais pas bien saisi getchar() qui " met en entrée " caractère après caractère, je pensais que si on lui envoyer "ok" par exemple il m'étais ok alors que finalement il passe caractère après caractère, je sais pas si j'ai bien étais clair :/

    voila si ça peut aider ce qui comme moi on du mal a avoir le déclique
    ( n'hésitez pas à me reprendre si j'ai mal expliqué )

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

Discussions similaires

  1. longueur comprise entre 4 et 15 caractères
    Par elitemedia dans le forum Langage
    Réponses: 3
    Dernier message: 18/11/2006, 00h46
  2. Java et Classeur Excel en entrée puis sortie
    Par mediateur59 dans le forum Documents
    Réponses: 10
    Dernier message: 16/11/2006, 09h25
  3. espace entre deux chaines de caractères
    Par Pitou5464 dans le forum Access
    Réponses: 2
    Dernier message: 09/08/2006, 12h16
  4. gestion des entrées et sortie en java
    Par lecyberax dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 14/05/2006, 22h51
  5. [K&R] Copie entrée sur sortie
    Par sorry60 dans le forum C
    Réponses: 7
    Dernier message: 25/04/2005, 21h32

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