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 : mon listing comporte une erreur que je ne trouve pas


Sujet :

C

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Débutant : mon listing comporte une erreur que je ne trouve pas
    Bonjour le forum,

    Je suis tout à fait débutant en C.

    Je programme un peu en VBA, en VB et en VBScript, j’ai donc des notions de programmation (variables, boucle…).

    Maintenant j’essaie d’apprendre le C avec un livre qui s’appelle « Apprenez le langage C en 21 Jours » par Peter Aitken & Bradley L. Jones.

    Le problème est que dans ce livre il y’a plein d’erreurs.

    Le programme « Hello World » qui est repris partout où on apprend le C contient une erreur…

    Mais il y’ a un autre listing que le livre propose qui contient aussi une erreur.

    Le problème est que ne suis pas (encore) capable de détecter l’erreur.

    Voici le listing, pourriez-vous me dire où est l’erreur et répondre à ces quelques questions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    int rayon, aire;
    main()
    {
          printf("Entrez le rayon (ex 10) : ");
          scanf("%d", &rayon);
          aire = (int) (3,14159 * rayon * rayon);
          printf("\n\nAire = &d"\n, aire);
          return 0;
          }
    Voici le message d’erreur de mon compilateur (DEV-C++) :

    8 E:\Mes Documents\C\HelloWorld.cpp stray '\' in program
    Pourriez-vous me dire ce qu’est scanf ?

    Pourriez-vous aussi me dire à quoi correspond %d ?

    Merci d’avance pour votre aide.

    Beegees

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Je débute aussi et j'utilise le même livre que toi.

    Je ne sais pas si ça peut t'aider mais il y a un truc qui me semble louche dans ton code.

    HelloWorld.cpp

    c'est l'extension .ccp , c'est pour du c++ ça non ?

    essaye de faire sauter tous les \n de ton code, il y a peut être de mal écris ou de mal placer.

    Et bon courage !

  3. #3
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Salut

    Déjà, ton fichier doit se terminer par .c et non .cpp.
    De plus, c'est %d et non &d dans le printf().
    %d veut dire qu'ici, on met la valeur d'une variable entière (aire dans ton cas, pour le printf() et rayon dans le scanf()).

    Nas'

  4. #4
    Rédacteur

    Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 113
    Points : 276
    Points
    276
    Par défaut
    l'erreur vient de \n qui est en dehors des " "
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          printf("\n\nAire = &d"\n, aire);
    fait plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("\n\nAire = %d\n", aire);

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Ascella
    Je débute aussi et j'utilise le même livre que toi.

    Je ne sais pas si ça peut t'aider mais il y a un truc qui me semble louche dans ton code.

    HelloWorld.cpp

    c'est l'extension .ccp , c'est pour du c++ ça non ?

    essaye de faire sauter tous les \n de ton code, il y a peut être de mal écris ou de mal placer.

    Et bon courage !
    Salut,

    Merci pour ta réponse.

    J'ai retiré les \n et ça fonctionne, je vais voir à quoi ce programme sert.

    Merci pour ton aide !

    Pour ce qui est de ccp, je ne sais pas si c'est du C ou du C++, tout ce que je sais c'est que j'essaie de programmer en C.

    Mon compilateur s'appelle DEV-C++, est ok pour programmer en C ?

    Si jamais quelqu'un peut répondre aux autres questions, ça serait vraiment sympa.

    MErci encore et bonne soirée.

    bgs

  6. #6
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Je n'avais pas fait attention au \n. Tu peux le laisser mais faut le laisser entre les guillemets.
    Ton fichier soit être un .c et non .cpp et DevC++ permet de programmer en C et en C++ donc pas de problème.
    Sinon j'ai répondu pour le %d et attention, c'est bien %d et non &d dans le printf().

    Nas'

  7. #7
    Rédacteur

    Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 113
    Points : 276
    Points
    276
    Par défaut
    Tu ne pourras pas apprendre le C comme ça en testant des programmes, essaye plutôt de commencer avec les bases, et de faire des programmes au fur et à mesure de ton apprentissage
    Voilà le lien pour les cours en C dispo sur dvp.com
    http://c.developpez.com/cours/

  8. #8
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par AjJi
    l'erreur vient de \n qui est en dehors des " "
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          printf("\n\nAire = &d"\n, aire);
    fait plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("\n\nAire = %d\n", aire);
    Bonjour AjJi,

    Merci pour ta réponse.

    Ces \n sont des sauts de ligne ?

    Quand j’exécute le programme en DOS, il me demande d’entrer le rayon, je met 12 et ensuite plus rien la fenêtre se ferme, y’a-t-il un pause comme en vbscript ?

    Merci pour tout !
    bgs

  9. #9
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Nasky
    Salut

    Déjà, ton fichier doit se terminer par .c et non .cpp.
    De plus, c'est %d et non &d dans le printf().
    %d veut dire qu'ici, on met la valeur d'une variable entière (aire dans ton cas, pour le printf() et rayon dans le scanf()).

    Nas'
    Bonjour Nasky,

    Le fichier objet (je pense que c’est comme ça que l’appelle) porte l’extension CPP.

    J’ai fais save as et là je peux enregistrer en .c, c’est ça le problème du CPP.

    Merci pour l’explication du %d, ce %d veut donc dire que si l’utilisateur met 10,53 il ne prendra que 10 ?

    A quoi sert ce scanf ?

    Merci encore pour ta réponse et bonne soirée.

    Bgs

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par beegees
    Merci pour l’explication du %d, ce %d veut donc dire que si l’utilisateur met 10,53 il ne prendra que 10 ?

    A quoi sert ce scanf ?
    Il est sans doute temps que tu changes de livre pour apprendre, ou que tu regardes les tutos proposés par developpez.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  11. #11
    Rédacteur

    Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 113
    Points : 276
    Points
    276
    Par défaut
    Citation Envoyé par beegees
    Bonjour AjJi,

    Merci pour ta réponse.

    Ces \n sont des sauts de ligne ?

    Quand j’exécute le programme en DOS, il me demande d’entrer le rayon, je met 12 et ensuite plus rien la fenêtre se ferme, y’a-t-il un pause comme en vbscript ?

    Merci pour tout !
    bgs
    dans les includes tu met :
    et à la fin de ton main tu met :
    cette fonction te permettra de voir le resultat de ton programme, en attendant l'appui d'une touche pour fermer la fenêtre

    Oui, et les \n c'est des newline, donc ca te permettera d'écrire dans la ligne suivante

  12. #12
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour AjJi,

    Merci pour tes réponses et ta patience.

    Je suis bien content de voir qu'il y'a un pause qui permet de voir le résultat ou les messages d'erreur du programme.

    Je continue à me former mais je reviendrai sans doute ici.

    Merci encore pour tout.

    bgs

  13. #13
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par thewho
    Bonjour,

    Il est sans doute temps que tu changes de livre pour apprendre, ou que tu regardes les tutos proposés par developpez.
    Bonjour Thewho,

    Oui en effet, je trouve cela honteux et scandaleux de mettre des livres de programmation en vente alors qu'ils contiennent des erreurs MONSTRE !

    Pour un néophyte comme moi, comment voulez vous les déceler ?

    C'est HONTEUX !

    N'hésitez pas à voir les références de ce livre dans mon premier message, c'est la seconde édition de ce livre, on se demande à quoi ressemble la première !

    J'ai imprimé le cours "le langage C" et je trouve cela pas mal, c'est en tout cas plus complet et plus "propre" que mon livre.

    Très bonne journée à toi.

    bgs

  14. #14
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    On va revenir sur le problème posé, voici un code corrigé, commenté.

    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
    34
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Variables globales sont à éviter sauf dans des cas bien spécifiques */
     
    /* main retourne int, toujours */
    int main()
    {
        /* Vu que tu veux afficher l'aire, en double ce serait mieux non? */
        double rayon, aire;
        char buf[128];
     
        printf("Entrez le rayon (ex 10) : ");
     
        /* Scanf est à éviter, on utiliser fgets et strtod */
        if(fgets(buf,sizeof buf, stdin) == NULL)
         {
         /* Gestion d'erreur */
         perror("Erreur de saisie :");
         return EXIT_FAILURE;
         }
     
        /* Récupération de rayon */
        rayon = strtod(buf,NULL);
     
        /* Calcul de l'aire :
           - les casts sont à éviter, toujours 
           - un nombre à virgule utilise un . et non une ,
        */
        aire = (3.14159 * rayon * rayon);
     
        printf("\n\nAire = %f\n", aire);
        return EXIT_SUCCESS;
    }
    Pose des questions si tu ne comprends pas.
    Jc

  15. #15
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par fearyourself
    On va revenir sur le problème posé, voici un code corrigé, commenté.

    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
    34
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Variables globales sont à éviter sauf dans des cas bien spécifiques */
     
    /* main retourne int, toujours */
    int main()
    {
        /* Vu que tu veux afficher l'aire, en double ce serait mieux non? */
        double rayon, aire;
        char buf[128];
     
        printf("Entrez le rayon (ex 10) : ");
     
        /* Scanf est à éviter, on utiliser fgets et strtod */
        if(fgets(buf,sizeof buf, stdin) == NULL)
         {
         /* Gestion d'erreur */
         perror("Erreur de saisie :");
         return EXIT_FAILURE;
         }
     
        /* Récupération de rayon */
        rayon = strtod(buf,NULL);
     
        /* Calcul de l'aire :
           - les casts sont à éviter, toujours 
           - un nombre à virgule utilise un . et non une ,
        */
        aire = (3.14159 * rayon * rayon);
     
        printf("\n\nAire = %f\n", aire);
        return EXIT_SUCCESS;
    }
    Pose des questions si tu ne comprends pas.
    Jc
    Bonjour Fearyourself,

    Merci beaucoup pour ce code commenté qui va beaucoup m'aider !

    Je suis au boulot pour l'instant mais je vais l'analyser et refaire ce programme sur le temps de midi.

    Désolé pour l'éloignement du sujet principal mais il me semble que les choses doivent être dite, on ne peut pas tout laisser faire.

    Encore un grand merci
    bgs

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par beegees
    Je suis tout à fait débutant en C.

    Maintenant j’essaie d’apprendre le C avec un livre qui s’appelle « Apprenez le langage C en 21 Jours » par Peter Aitken & Bradley L. Jones.
    Laisse tomber. Il y a une liste de vrais livres de C sur ce site.

    http://c.developpez.com/livres/

    EDIT : "Apprenez le langage C en 21 Jours" : Après une consultation rapide du net, il semble que la version originale soit correcte, mais que ce soit la traduction en français qui soit épouvantable...
    Pas de Wi-Fi à la maison : CPL

  17. #17
    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
    Encore que, si le scanf() est déjà dans la version originale, ce n'est pas un bon livre pour les débutants...
    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.

  18. #18
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Laisse tomber. Il y a une liste de vrais livres de C sur ce site.

    http://c.developpez.com/livres/

    EDIT : "Apprenez le langage C en 21 Jours" : Après une consultation rapide du net, il semble que la version originale soit correcte, mais que ce soit la traduction en français qui soit épouvantable...
    Bonjour Emmanuel,

    Merci pour l'info.

    Je vais aller à la fnac voir si ces livres sont disponibles.

    Merci encore.

    bgs

  19. #19
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Médinoc
    Encore que, si le scanf() est déjà dans la version originale, ce n'est pas un bon livre pour les débutants...
    Bonjour Médinoc,

    Que veux tu dire par "dans la version originale" ?

    Merci
    bgs

  20. #20
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par beegees
    Bonjour Médinoc,

    Que veux tu dire par "dans la version originale" ?

    Merci
    bgs
    Si c'est dans le code source de la version originale du bouquin...

    Jc

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ma requête contient une erreur, que je ne trouve pas
    Par adrien.ren dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/05/2008, 10h32
  2. Une erreur que je ne comprend pas
    Par Macss dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/12/2007, 19h44
  3. [Tableaux] Une erreur que je ne comprend pas
    Par bibom dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2006, 18h47
  4. Réponses: 12
    Dernier message: 11/04/2006, 17h36
  5. [PostGreSQL] une erreur que je ne comprends pas
    Par flo78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h18

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