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 :

qui connais le livre le langage C Norme ANSI de Kernighan et richie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut qui connais le livre le langage C Norme ANSI de Kernighan et richie
    Bonjour

    Je suis entrain d'apprendre avec le livre le langage C Norme ANSI de Kernighan et richie

    jai tapé le code de la page 22 et quand je lance le programme il affiche rien j'ai aucun message d'erreur

    est ce quelq'un possede ce livre et a eu le probleme .

    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
    30
    31
    32
    33
    #include <stdio.h>
    #include <stdlib.h>
    // compte les chiffres, les caracteres d'espacement et les autres caracteres en entree
    int main()
    {
     
     
        int c,i,nespace,nautre;
     
        int nchiffre[10];
     
        nespace=nautre=0;
     
        for(i=0; i<10; ++i)
            nchiffre[i]=0;
     
        while((c=getchar()) !=EOF)
            if(c >='0'&&c <='9')
                ++nchiffre[c-'0'];
            else if(c == ' ' || c == '\n' || c == '\t')
                ++nespace;
            else
                ++nautre;
     
        printf("Chiffres=");
        for(i =0; i< 10; ++i)
            printf("%d",nchiffre[i]);
        printf(", espacement = %d, autres = %d\n",nespace,nautre);
     
     
     
        return 0;
    }

  2. #2
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Salut,

    Premièrement, très bon livre que je suis en train de lire pour garder la forme !

    Quand tu dis qu'il n'affiche rien, la console se lance-t-elle ?
    C'est probablement car ton programme arrive sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while((c=getchar()) !=EOF)
    où getchar est bloquant. C'est à dire que tant que tu n'appuies pas sur une touche, rien ne se passe.

    Pour sortir de la boucle, il faut ensuite que tu envoies les caractère EOF : CTRL+Z sur Windows et CTRL+D sur un système Unix

    Petit conseil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while((c=getchar()) !=EOF)
            if(c >='0'&&c <='9')
                ++nchiffre[c-'0'];
            else if(c == ' ' || c == '\n' || c == '\t')
                ++nespace;
            else
                ++nautre;
    Ce code est correct et fonctionne mais il vaut mieux insérer un bloc d'instruction dans le while {} car le jour où tu décides d'ajouter une autre instruction que le if dans ta boucle, tu risques simplement d'oublier les {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while((c=getchar()) !=EOF)
    {
        if(c >='0'&&c <='9')
            ++nchiffre[c-'0'];
        else if(c == ' ' || c == '\n' || c == '\t')
            ++nespace;
        else
            ++nautre;
    }
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  3. #3
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Juste pour intervenir en vitesse :

    Citation Envoyé par deletme Voir le message
    Petit conseil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while((c=getchar()) !=EOF)
            if(c >='0'&&c <='9')
                ++nchiffre[c-'0'];
            else if(c == ' ' || c == '\n' || c == '\t')
                ++nespace;
            else
                ++nautre;
    Ce code est correct et fonctionne mais il vaut mieux insérer un bloc d'instruction dans le while {} car le jour où tu décides d'ajouter une autre instruction que le if dans ta boucle, tu risques simplement d'oublier les {}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while((c=getchar()) !=EOF)
    {
        if(c >='0'&&c <='9')
            ++nchiffre[c-'0'];
        else if(c == ' ' || c == '\n' || c == '\t')
            ++nespace;
        else
            ++nautre;
    }
    C'est justement tout "l'art" du C K&R !
    Mettre le strict minimum tout en faisant "bien" ce qu'il faut !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  4. #4
    Membre chevronné
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Par défaut
    Oui c'est ce que je découvre en le lisant et c'est parfois déroutant quand on n'a pas l'habitude de lire du code de ce style. Mais il faut bien avouer, comme tu le précises, que c'est tout un art
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Le style K&R ne correspond plus vraiment à la façon d'écrire du code aujourd'hui. Quand je l'ai eu, je me suis mis à écrire des trucs un peu sioux, genre des boucles for() sans corps pour imprimer le contenu d'un tableau...

    Le premier problème je trouve du style K&R est qu'il suppose une très bonne connaissance du langage, typiquement la nécessite ou pas d'accolades dans le code qui nous occupe ici. Le second est que c'est nul d'un point de vue évolutivité car trop sujet à erreur si quelqu'un rajoute à l'arrache une instruction, ne serait-ce qu'un printf() pour faire une trace. Alors certes, cette personne aurait tord, mais pourquoi ne pas directement écrire des accolades pour éviter les soucis futurs ?

    Mais bon, on va encore dire que c'est inutile des accolades qui ne servent pas et on va rentrer dans les guéguerres de styles

  6. #6
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Le bouquin est en papier.
    Donc il ne changera pas avec le temps !
    Donc aucun besoin d'évolutivité sur ce code !!!

    (t'as vu comment que je gagne la guéguerre ? )

    ....ah parce que le code peut être recopié ? mince je n'y avais pas pensé....
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

Discussions similaires

  1. [Livre] Le langage C - Norme ANSI, 2ème édition
    Par djibril dans le forum Livres
    Réponses: 0
    Dernier message: 16/06/2014, 17h09
  2. Langage C norme ANSI
    Par Deamonix dans le forum Débuter
    Réponses: 9
    Dernier message: 21/09/2009, 18h55
  3. Vends ou échange livre "Le langage C : norme ANSI"
    Par jerome71300 dans le forum Lectures
    Réponses: 0
    Dernier message: 14/02/2008, 13h49
  4. Réponses: 1
    Dernier message: 17/11/2004, 17h44

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