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

  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 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 averti 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
    Points : 414
    Points
    414
    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 sénior
    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
    Points : 20 985
    Points
    20 985
    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
    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 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 sénior
    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
    Points : 20 985
    Points
    20 985
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 588
    Points
    41 588
    Par défaut
    Pourquoi fais-tu commencer tes printf() par "%" ?

  7. #7
    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 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

  8. #8
    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 : 68
    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 b.soufiane Voir le message
    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);
    Pourquoi tu t'obstines avec scanf() alors que d'autres solutions universellement adoptées ont été proposées.

  9. #9
    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
    Parce que tout simplement je veux arriver de resoudre mon probleme et apprendre à utiliser scanf() bien .

    après je pourrais tenter de changer le code .

    merci pour votre aide
    c'est très gentil



    Citation Envoyé par Emmanuel Delahaye Voir le message
    Pourquoi tu t'obstines avec scanf() alors que d'autres solutions universellement adoptées ont été proposées.

  10. #10
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par b.soufiane Voir le message
    Parce que tout simplement je veux arriver de resoudre mon probleme et apprendre à utiliser scanf() bien .

    après je pourrais tenter de changer le code .

    merci pour votre aide
    c'est très gentil
    C'est une fonction relativement complexe et difficile à utiliser correctement. Beaucoup de programmeurs expérimentés décident ne pas l'utiliser, simplement parce qu'elle n'a pas été prévue pour réaliser des saisies non formatées. Si toutefois ton but est absolument de maîtriser cette fonction, voici une lecture indispensable: scanf démystifiée.

    Thierry

  11. #11
    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
    Citation Envoyé par Thierry Chappuis Voir le message
    C'est une fonction relativement complexe et difficile à utiliser correctement. Beaucoup de programmeurs expérimentés décident ne pas l'utiliser, simplement parce qu'elle n'a pas été prévue pour réaliser des saisies non formatées. Si toutefois ton but est absolument de maîtriser cette fonction, voici une lecture indispensable: scanf démystifiée.

    Thierry
    Merci pour le cours sur scanf , c'est vrai qu'elle génére beaucoup d'erreurs mais je veux maîtriser cette fonction et faire avec mon petit programme , qui ne veut pas se terminer .

    Merci pour votre aide

    Bonne journée

+ 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, 20h58
  2. Demande d'aide sur mon code en C
    Par tekos22 dans le forum Débuter
    Réponses: 7
    Dernier message: 31/12/2009, 11h08
  3. Demande d'aide sur mon code
    Par b.soufiane dans le forum C++
    Réponses: 6
    Dernier message: 07/12/2007, 17h36
  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, 11h14
  5. [Language] Aide sur mon premier programme Java?
    Par hash2zo dans le forum Langage
    Réponses: 15
    Dernier message: 27/09/2005, 20h26

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