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 :

debugger un programe + un petit prog de multiplication


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 61
    Par défaut debugger un programe + un petit prog de multiplication
    Bonjour alors voila j'ai deux questions en 1
    Alors dabord je n'ai vraiment pas compris a quoi servé un debugger ??(
    si c bien ça sa sert a remplaçer et corriger automatiquement des faute par exemple printfff au lieu de printf)?? et si oui su dev comment faire pour que ça corrige un code source.


    2 question
    alors voila mon programme je débute un:

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
    	long resultat, nombre1, nombre2;
    	printf("Bonjour, voiçi un programme dos pour faire des multiplications ");
     
    	printf("Vueillez entrez un nombre");
    	scanf("%ld", &nombre1"); // içi la groose ligne rouge
     
    	printf("vueillez entrez un deuxième nombre ");
     
    	scanf("%ld", &nombre2);
     
    	resultat = nombre1 * nombre2;
    	printf(" %ld + %d = %ld \n", nombre1, nombre2, resultat);
     
    	return 0;
    }

    et la sur code blocks il me mets une grosse ligne rouge sur scanf("%ld", &nombre1");
    Bonvoila merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 51
    Par défaut
    Tu as tout simplement oublié une guillemet après &nombre1 dans ton scanf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("%ld", &nombre1"); // içi la groose ligne rouge
    Par ailleurs je crois savoir que certains compilateurs sont sensibles aux fautes d'orthographes

    Sinon bravo, ça marche.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 466
    Par défaut
    Oublié ou rajouté une guillemet en trop il me semble non ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par spawntux
    Oublié ou rajouté une guillemet en trop il me semble non ?
    Ça dépend comment on l'entend
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par spawntux
    Oublié ou rajouté une guillemet en trop il me semble non ?
    Tu l'as oublié là, donc il est en trop (car sans son jumeau).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 51
    Par défaut
    je voulais dire qu'il y a une guillemet de trop, celle qui est après &nombre1.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par gauguin
    [...] Par ailleurs je crois savoir que certains compilateurs sont sensibles aux fautes d'orthographes [...]
    Et d'autres aux fautes de grammaire (<- sans "s").

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par mitherkiller
    [...] 1
    Alors dabord je n'ai vraiment pas compris a quoi servé un debugger ??(
    si c bien ça sa sert a remplaçer et corriger automatiquement des faute par exemple printfff au lieu de printf)??[...]
    Non, cela serait trop facile.
    Lis ça.

  9. #9
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    Voici quelques petits commentaires sur ton programme...
    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
    #include <stdio.h> 
    #include <stdlib.h>   
     
    /* -TC- La fonction main() ne possède que deux formes valides en C: 
        int main(void) ou int main(int argc, char *argv[]) */
    int main(void) 
    {  
        /* -TC- Pour des questions de lisibilité, je préfère une déclaration par ligne*/
        long nombre1;
        long nombre2; 
        long resultat;
     
        printf("Bonjour, voici un programme console pour faire des multiplications\n");     
        printf("Veuillez entrez un nombre: "); 
        /* -TC- Il est nécessaire ici de vider le tampon pour s'assurer
            que l'invite sera affichée */
        fflush(stdout);
        scanf("%ld", &nombre1); 
     
        printf("veuillez entrez un deuxième nombre: ");   
        /* Ici aussi, il faut vider le tampon */
        fflush(stdout);
        scanf("%ld", &nombre2);   
     
        resultat = nombre1 * nombre2; 
        printf("%ld + %ld = %ld\n", nombre1, nombre2, resultat);   
     
        return 0; 
    }
    Maintenant, ce code fonctionne, mais dépend de la bonne volonté de l'utilisateur qui peut très bien entrer n'importe quoi. Il y a deux solutions pour sécuriser les entrées utilisateur.
    • Se passer de scanf() (j'utilise uniquement fgets + strtol/strtod/sscanf)
    • Apprendre à utiliser scanf() et vérifier sa valeur de retour.


    Pour plus d'infos sur scanf(), cette lecture est très instructive: http://xrenault.developpez.com/tutoriels/c/scanf/

    En ce qui concerne la sécurisation de ton code, voici un exemple simple. J'ai encapsulé le code qui se répétait dans les fonctions m_saisir_long() et m_stdin_vider_tampon():
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Vide les caractères résiduels contenus dans le tampon de stdin */
    void m_stdin_vider_tampon(void)
    {
        scanf("%*[^\n]");
        getchar();
    }
     
    /* Le code de saisie d'un long est utiliser deux fois, on peut le mettre
        dans une fonction */
    long m_saisir_long(char const *message)
    {
        long nombre;
     
        printf("%s", message);
        fflush(stdout);
        while (scanf("%ld", &nombre) != 1)
        {
            /* On vide le tampon */
            m_stdin_vider_tampon();
     
            printf("Erreur: %s", message);
            fflush(stdout);
        }
     
        /* On vide le tampon et on retourne nombre */
        m_stdin_vider_tampon();
     
        return nombre;
    }
     
    int main(void)
    {
        long nombre1;
        long nombre2;
        long resultat;
     
        printf("Bonjour, voici un programme console pour faire des multiplications\n");
        nombre1 = m_saisir_long("Veuillez saisir un nombre: ");
        nombre2 = m_saisir_long("Veuillez saisir un 2ème nombre: ");
     
        resultat = nombre1 * nombre2;
        printf("%ld * %ld = %ld\n", nombre1, nombre2, resultat);
     
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  10. #10
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Par défaut
    parfait
    a part la fin, je mettrais un system("PAUSE"); avant le return sinon la fenêtre DOS se ferme après que l'on insert la deuxième valeur et qu'on valide.

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Vide les caractères résiduels contenus dans le tampon de stdin */
     
    void m_stdin_vider_tampon(void)
    {
         scanf("%*[^\n]");
         getchar();
    }
     
    /* Le code de saisie d'un long est utiliser deux fois, on peut le mettre
    dans une fonction */
     
    long m_saisir_long(char const *message)
    {
         long nombre;
         printf("%s", message);
         fflush(stdout);
         while (scanf("%ld", &nombre) != 1)
         {
               m_stdin_vider_tampon();           /* On vide le tampon */
               printf("Erreur: %s", message);
               fflush(stdout);
         }
         m_stdin_vider_tampon();     /* On vide le tampon et on retourne nombre */
         return nombre;
    }
     
    int main(void)
    {
        long nombre1;
        long nombre2;
        long resultat;
     
        printf("Bonjour, voici un programme console pour faire des multiplications\n");
     
        nombre1 = m_saisir_long("Veuillez saisir un nombre: ");
        nombre2 = m_saisir_long("Veuillez saisir un 2ème nombre: ");
     
        resultat = nombre1 * nombre2;
     
        printf("%ld * %ld = %ld\n", nombre1, nombre2, resultat);
     
        system("PAUSE");
     
        return 0;
    }

  11. #11
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    J'ai jamais utilisé de system("PAUSE")... L'auteur de ce fil semble utiliser Code::Blocks comme EDI. Il n'est pas utile de recourir à l'instruction system("PAUSE") avec cet environnement de développement. D'ailleurs, ce n'est absolument pas portable, et cette pratique est déconseillée. Si, pour des raisons purement pratiques, j'ai besoin d'éviter que la console Windows (N.B. et pas DOS) ne disparaisse dès la fin de mon programme, j'utilise de préférence la fonction getchar(), qui fait partie de la bibliothèque standard du C.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  12. #12
    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 GG_L-aspi
    parfait
    a part la fin, je mettrais un system("PAUSE"); avant le return sinon la fenêtre DOS se ferme après que l'on insert la deuxième valeur et qu'on valide.
    Huh ? Quelle 'fenêtre DOS' ? Sous Windows XP, la console n'est certainement pas une 'fenêtre DOS...'

    Et le problème évoqué n'apparait qu'avec l'ancien IDE Dev-C++. Avec Code::Blocks, une pause est ajoutée automatiquement par l'IDE.

    En ce qui concerne l'application elle-même, il est normal que quand elle se termine, la console se ferme, si on n'a pas lancée celle-ci au préalable.

    Bref, avant de mettre n'importe quoi dans le code, il faut commencer par utiliser les bons outils et utiliser correctement son système.

Discussions similaires

  1. Débutant souhaitant creer un petit prog
    Par Djohn dans le forum Windows
    Réponses: 5
    Dernier message: 31/08/2007, 16h38
  2. Petit prolème de multiplication pour débutant
    Par vince351 dans le forum Langage
    Réponses: 7
    Dernier message: 05/03/2007, 15h12
  3. [Débutant] soucis avec un petit prog
    Par Ludo75 dans le forum C++
    Réponses: 5
    Dernier message: 12/09/2005, 20h41
  4. Petit prog pour éxécuter un script PHP
    Par Sub0 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 3
    Dernier message: 26/04/2005, 15h53
  5. [debutant] pour debbuger un petit prog avec menu
    Par niluge01 dans le forum Windows
    Réponses: 3
    Dernier message: 22/11/2003, 14h03

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