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 :

Aide sur mon Code !


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut Aide sur mon Code !
    Bonjour,
    Vous pouvez m'aider de corriger mon code !.


    Je suis debutant en programmation en C et C++
    c'est tout mon premier programme ( Calcule de la remise qui depend de la categorie et le montant brut) .




    Je rencontré ce probleme avec Visual studio C++ express
    et en plus le programme me demande pas de definir la valeur de codecat (cette partie du code scanf("%S",&codecat)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Run-Time Check Failure #2 - Stack around the variable 'codecat' was corrupted.
    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
     
    #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);
     
    }

  2. #2
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char codecat;
    ...
    scanf("%S",&codecat);
    tou d'abord, la variable codecat est un caractère et non pas une chaine de caractères.....

    En suite le %S -> %s

    bon courage, il faut voire des exemples avant de débuter a programmer !!!!

  3. #3
    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 b.soufiane Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Run-Time Check Failure #2 - Stack around the variable 'codecat' was corrupted.
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char codecat;
    <...>
    scanf("%S",&codecat);
    /*Lire la valeur du variable , s Designe le type char*/
    }
    Bah, tu définis une variable de 1 char. Tu espères mettre combien de caractères dedans ? Tu ne penses pas qu'un tableau de N char serait mieux ?

    D'autre part, c'est "%s" et non "%S".

    Enfin, cette saisie constitue un trou de sécurité. Il vaut mieux utiliser exclusivement fgets() suivi de fclean() (fonction 'communautaire' publiée maintes fois sur ce forum) et les fonction de conversion nécessaires pour construire des fonctions de saisie correctes.

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut corriger du code !
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Bah, tu définis une variable de 1 char. Tu espères mettre combien de caractères dedans ? Tu ne penses pas qu'un tableau de N char serait mieux ?

    D'autre part, c'est "%s" et non "%S".

    Enfin, cette saisie constitue un trou de sécurité. Il vaut mieux utiliser exclusivement fgets() suivi de fclean() (fonction 'communautaire' publiée maintes fois sur ce forum) et les fonction de conversion nécessaires pour construire des fonctions de saisie correctes.
    jj'ai chang" %s en %c , pck je pense enregistrer un seul caractère dans la variable

    mais j'ai toujours le même probleme !

    merci pour votre aide

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    #include "stdafx.h"
     
     
    int _tmain()
    {/* Declaration des variable */
    char codecat;
    float tauxremise=0,remise=0; 
    int net=0,brut=0;
    char numcom;
     
     
     
     
    printf("%Entrer la Valeur du numcom \n");/*Affihcer le message explicatif pour l'utilisateur*/
     
    scanf("%c",&numcom);
    /*Lire la valeur du variable , s Designe le type char*/
     
    printf("%Entrer la Valeur brut \n");
     
     
    scanf("%d",&brut);
    /*Lire la valeur du variable , e Designe le type int */
     
    printf("%Entrer la Valeur du codecat \n");
     
    scanf("%c",&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 %d \n",brut);
    printf("De la categorie %c\0 \n",codecat);
     
    return 0;
    }

  5. #5
    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 b.soufiane Voir le message
    jj'ai chang" %s en %c , pck je pense enregistrer un seul caractère dans la variable

    mais j'ai toujours le même probleme !

    merci pour votre aide
    Tu n'as toujours pas compris comment on mettait les balises de code ... Et si tu lisais les règles du forum ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%Entrer la Valeur du numcom \n");
    C'est quoi ce "%E" ? Il n'y a pas de variables correspondante. Le comportement est indéfini.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       printf ("De la categorie %c\0 \n", codecat);
    Pourquoi un \0 (marche de fin de chaine) au milieu de la chaine ? Ce qui est après sera ignoré. C'est voulu ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       char codecat;
    <...>
       scanf ("%c", &numcom);
    Tu saisies un caractère. OK. Mais n'oublie pas que tu dois 'valider' avec <enter>, ce qui génère un '\n'. Qu'est-ce qui lit ce '\n' ? Si personne ne le lit, l'appel suivant de n'importe quelle fonction d'entrée ne sera pas bloquant.

    Je recommande d'utiliser exclusivement fgets() (C standard) suivie de fclean() (code 'maison' à chercher sur le forum) pour réaliser les entrées quelle qu'elles soient.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Pourquoi fais-tu commencer tes printf() par "%" ?
    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
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Par défaut Probleme non resoulu encore
    Bonjour,

    Je ne comprend pas pourquoi le programme me permet pas d'enregistrer la valeur du codecat
    il n'execute pas cette partie du code

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%c",&codecat);

    alors quand je change ce code en mettant %s

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s",&codecat);

    tout marche bien sauf qu'à la fin j'ai ce probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Run-Time Check Failure #2 - Stack around the variable 'codecat' was corrupted.
    et sa je sais que c'est dû au compretement de la variable !
    mais ..

    et voilà mon code source :
    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
    67
    68
     
     
    #include "stdafx.h"
     
     
    int _tmain()
    {/* Declaration des variable */
    char codecat;
    float tauxremise=0,remise=0; 
    int net=0,brut=0;
    char numcom;
     
     
     
     
    printf("Entrer la Valeur du numcom \n");/*Affihcer le message explicatif pour l'utilisateur*/
     
    scanf("%c",&numcom);
    /*Lire la valeur du variable , s Designe le type char*/
     
    printf("Entrer la Valeur brut \n");
     
     
    scanf("%d",&brut);
    /*Lire la valeur du variable , e Designe le type int */
     
    printf("Entrer la Valeur du codecat\n");
     
    scanf("%c",&codecat);
    /*Lire la valeur du variable , c 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 %d \n",brut);
    printf("De la categorie %c \n",codecat);
     
    return 0;
    }


    Et merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CPU - Fuites de mémoires] Aide sur mon code C.
    Par paraze_07 dans le forum SDL
    Réponses: 3
    Dernier message: 14/11/2010, 19h58
  2. Demande d'aide sur mon code en C
    Par tekos22 dans le forum Débuter
    Réponses: 7
    Dernier message: 31/12/2009, 10h08
  3. Demande d'aide sur mon code
    Par b.soufiane dans le forum C++
    Réponses: 6
    Dernier message: 07/12/2007, 16h36
  4. svp un peu d'aide sur mon update, resumé simple en dessous
    Par hansaplast dans le forum Langage SQL
    Réponses: 11
    Dernier message: 14/11/2005, 10h14
  5. [Language] Aide sur mon premier programme Java?
    Par hash2zo dans le forum Langage
    Réponses: 15
    Dernier message: 27/09/2005, 19h26

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