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 :

Demande d'aide sur mon code


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Demande d'aide sur mon code
    Bonjour ,

    Je suis debutant en programmation en C++
    c'est tout mon premier programme ( Calcule de la remise qui depend de la categorie et le montant brut) .
    j'ai un probleme , le dernier message ne s'affiche pas

    Code c++ : 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int main (void)
    {
      /* Declaration des variable */
      float tauxremise=0,remise=0,brut=0,net=0;
      char numcom;
      char codecat;
     
      printf("%Entrer la Valeur du numcom \n");/*Affihcer le message explicatif  pour l'utilisateur*/
     
      scanf("%s",&numcom);
      /*Lire la valeur du variable , s Designe le type char*/
     
      printf("%Entrer la Valeur brut \n");
     
     
      scanf("%E",&brut);
      /*Lire la valeur du variable , e Designe le type float */
     
      printf("%Entrer la Valeur du codecat \n");
     
      scanf("%s",&codecat);
      /*Lire la valeur du variable , s Designe le type char*/
     
     
      /*Boucle If , Verifier la valeur du variable CodeCat(categorie) , pour definir le   taux du remise , cad la variable tauxremise */
     
      if (codecat=='G'){
    	if (brut >= 50000){
    		tauxremise = 0.1;
    	}
      }
     
      if (codecat=='D'){
    	if (brut>=10000){
    		tauxremise=0.05;
    	}
      }
     
      if (codecat=='P'){
    	if (brut>=2000){
    		tauxremise=0.01;
    	}
      }
     
      /* Calcule de la remise */
     
      remise=(brut*tauxremise);
     
      /*  Calculer le net */
     
      net=(brut*remise);
     
      /* Afficher le resultat */
      printf("Resultats\n",net);
     
    }

  2. #2
    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
    Ce n'est pas du C++, ça, c'est du C...
    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.

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut merci de ta reponse
    Je croyais que je programme en C++
    j'apprend à travers des sites web (comment ça marche )
    Vous pouvez m'aider , de resoudre quand même mon probleme !
    surtout que je veux afficher plusieurs resultats à la fin
    j'utilise Visual studio Express C++


    c'est quoi la différence entre C et C++ ? d'apres mon code


    Merci

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    salut,
    alors quelques indications :
    1-
    C | C++
    -----------------------
    printf | std::cout
    scanf | std::cin

    2-Tu peut remplacer ton ensemble de if par un switch
    3-scanf("%s",&numcom); est faux. %s est as utilisé pour une string et non un caratère=> grosse erreur memoire : c tapez dans la console <=> "c\0" => 2 caractères copiés à l'adresse correspondant à 1 caractère.... on ne sait pas où est copié le second....

    tu devrait regarder la faq C++ pour t'aider
    http://c.developpez.com/faq/cpp/

    bon courage

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Nouveau Probleme
    Merci de votre aide . j'apprend beaucoup de chose grâce à vous .

    Après changement de mon code , j'ai rencontré ce probleme avec Visual studio C++ express

    Run-Time Check Failure #2 - Stack around the variable 'codecat' was corrupted.

    Citation Envoyé par Nouveau code

    Code c++ : 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int main (void)
    {
      float tauxremise=0,remise=0; 
    int net=0,brut=0;
    char numcom;
    char codecat;
     
     
     
    printf("%Entrer la Valeur du numcom \n");/*Affihcer le message explicatif pour l'utilisateur*/
     
    scanf("%c\0",&numcom);
    /*Lire la valeur du variable , s Designe le type char*/
     
    printf("%Entrer la Valeur brut \n");
     
     
    scanf("%E",&brut);
    /*Lire la valeur du variable , e Designe le type float */
     
    printf("%Entrer la Valeur du codecat \n");
     
    scanf("%S",&codecat);
    /*Lire la valeur du variable , s Designe le type char*/
     
     
    /*Boucle If , Verifier la valeur du variable CodeCat(categorie) , pour definir le taux du remise , cad la variable tauxremise */
     
    if (codecat=='G'){
    if (brut >= 50000){
    tauxremise = 0.1;
    }
    }
     
    if (codecat=='D'){
    if (brut>=10000){
    tauxremise=0.05;
    }
    }
     
    if (codecat=='P'){
    if (brut>=2000){
    tauxremise=0.01;
    }
    }
     
    /* Calcule de la remise */
     
    remise=(brut*tauxremise);
     
    /* Calculer le net */
     
    net=(brut-remise);
     
    /* Afficher le resultat */
     
    printf("Le net egal a %d \n",net);
    printf("du  montant brut %E \n",brut);
    printf("De la categorie %c\0 \n",codecat);
     
    }

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Tu refais la même erreur sur codecat que sur numcom (le %s au lieu d'un %c).

    Tu devrais plutôt demander dans le forum sur le langage C, tu y trouveras surement plus de gens qui connaissent ce langage là-bas.

    MAT.

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Pour te permettre de migrer vers le C++, vu que c'est le langage que tu sembles vouloir utiliser, il faut savoir que:
    1. stdio.h, stdlib.h sont des en-têtes C... En C++, on utiliser l'entete <iostream> pour gérer les flux standards
    2. printf et scanf sont des instructions C... En C++, on préféera les "instructions" cout<<valeur_a_afficher et cin>>valeur_a_introduire_par_l'utilisateur, disponible dans l'espace de nommage std (grace à l'inclusion du fichier iostream)


    En plus, en C, on déconseille très fortement l'utilisation de scanf, pour une série de raisons bien particulières que tu retrouvera facilement sur le forum C, l'utilisation de scanf étant un problème récurent

    Tu devrais prendre l'habitude de déclarer une seule variable par ligne: ca revient au même pour le programme, mais ca te permettrra de le relire bien plus facilement dans quelques jours ou dans quelques mois:
    Un code source est beaucoup plus souvent lu qu'il n'est écrit... la première chose à faire est donc de veiller à ce qu'un lecteur (humain) ait le plus facile possible à le lire
    Enfin, d'un point de vue de la logique, que se passerait-il avec un code de catégire ("codecat") 'D', un brut inférieur à 10000 (mais à la limite supérieur à 5000)

    Tel quel ton code signifie que le client (ou que la commande) "D", qui semble logiquement être meilleur(e) qu'un client (ou qu'une commande) "G" n'aurait même pas droit à la remise "G" dans ces conditions Cela te semble-t-il logique

    Au passage... Mettre des commentaires, c'est très bien... Mais l'idée reste quand même toujours de mettre des commentaires... utiles.

    Le seul commentaire qui entre éventuellement dans cette catégorie, parmi tous ceux que tu as placés, ce serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*Boucle If , Verifier la valeur du variable CodeCat(categorie) , pour definir le taux du remise , cad la variable tauxremise */
    car tous les autres ne donnent finalement aucune information pertinente autre que ce que l'on peut de toutes manières lire dans l'instruction

    En outre, mais ca, ce n'est qu'un avis strictement personnel, je préfères toujours qu'un commentaire me fournisse des précisions sur un code avant d'avoir lu le code en question plutôt que d'avoir un commentaire qui me fournis après coup des informations complémentaires sur une (suite d') instruction(s) que j'aurais mis un certain temps à comprendre par moi-même

    Ainsi, la seule ligne qui pourrait valoir un commentaire serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Demandons à l'utilisateur d'introduire <ce à quoi correspond codecat> 
     * parmi les valeurs
     *     - G qui représente <ce que représente codecat==G>
     *     - D qui représente <ce que représente codecat==D>
     *     - P qui représente <ce que représente codecat==D>
     */
    scanf("%S",&codecat);
    en remplaçant ce qui est ici entre < et > par la manière dont tu expliquerais à un "non informaticien" (qui donc se fout royalement de savoir si c'est de type "char", "float" ou "pinrlimpimpin") ce que ca représente, à quoi ca correspond, et ce que tu compte en faire...

    L'informaticien, lui, verra tout de suite que tu compte utiliser une variable de type (ici) "char", et ce n'est donc pas une information "pertinente"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Demande d'aide sur mon code en C
    Par tekos22 dans le forum Débuter
    Réponses: 7
    Dernier message: 31/12/2009, 10h08
  2. Demande d'aide sur un code JAVA
    Par schine dans le forum Langage
    Réponses: 6
    Dernier message: 02/06/2009, 21h43
  3. demande d'aide sur un code de KSH
    Par adil.N dans le forum Linux
    Réponses: 1
    Dernier message: 08/05/2008, 21h42
  4. Aide sur mon Code !
    Par b.soufiane dans le forum C
    Réponses: 10
    Dernier message: 07/12/2007, 12h38
  5. Demande d'aide sur un code source
    Par Soward dans le forum SDL
    Réponses: 3
    Dernier message: 13/06/2007, 20h22

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