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 :

Probleme inconnu... [debutant]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 3
    Par défaut Probleme inconnu... [debutant]
    Salut a tous
    Voila, etant nouveau dans le domaine du C, j espere beaucoup apprendre avec ce forom 8)
    Voila, dans le cadre d un Tp, on a coder ce programme!
    En gros, il faut que m soit le chiffre des milliers, c le chiffre des centaine, d le chiffre des dizaine, et enfin u le dernier chiffre!
    Le prof nous a aidez, mais vu que c etait la fin, lui meme n a pas reussi a trouver l erreur!
    Donc le prog ne marche pas
    J aimerais comprendre, voila ce que j ai coder:

    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>
     
    int main()
    {
     
    unsigned char m,c,d,u;
    int nb;
     
     
    printf("m = "); scanf("%c",&m);
    if( (m<'0') || (m>'9')) 
    printf("choississez une autre valeur pour m \n");
     
    printf("c = "); scanf("%c",&c);
    if( (c<'0') || (c>'9')) 
    printf("choississez une autre valeur pour c \n");
     
    printf("d = "); scanf("%c",&d);
    if( (d<'0') || (d>'9')) 
    printf("choississez une autre valeur pour d \n");
     
    printf("u = "); scanf("%c",&u);
    if( (u<'0') || (u>'9')) 
    printf("choississez une autre valeur pour u \n");
     
     
    nb=1000*(m-'0')+100*(c-'0')+10*(d-'0')+1*(u-'0');
     
    printf("nb = %d" ,nb);
     
     
    return 0;
    }
    Voila merci

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 869
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 869
    Par défaut
    Quand tu dis qu'il ne marche pas, il plante ? Il donne des résultats faux ?

    Tu demandes de saisir à nouveau les chiffres erronnés si ils ne sont pas compris dans la fourchette '0' '9', mais il n'y a pas de boucle, donc tu passes quand même au chiffre suivant, même si l'entrée de l'utilisateur est fausse.

  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 Re: Probleme inconnu... [debutant]
    Citation Envoyé par The_Zarabe
    En gros, il faut que m soit le chiffre des milliers, c le chiffre des centaine, d le chiffre des dizaine, et enfin u le dernier chiffre!
    Le prof nous a aidez, mais vu que c etait la fin, lui meme n a pas reussi a trouver l erreur!
    Donc le prog ne marche pas
    C'est à dire ?, Il a mal au pieds ?
    J aimerais comprendre, voila ce que j ai coder:
    scanf() n'est pas une fonction de débutant. Mieux vaut utiliser fgets() et les fonctions de conversion/extraction qui vont bien...

    http://emmanuel-delahaye.developpez.com/notes.htm

    Le test d'erreur est incomplet. Correction partielle. Pose des questions si tu ne comprends pas.
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
       unsigned char m, c, d, u;
       int nb;
       int err;
     
       do
       {
          printf ("m = ");
          scanf ("%c", &m);
          getchar ();
          err = m < '0' || m > '9';
          if (err)
          {
             printf ("choississez une autre valeur pour m \n");
          }
       }
       while (err);
     
       printf ("c = ");
       scanf ("%c", &c);
       getchar ();
       if ((c < '0') || (c > '9'))
          printf ("choississez une autre valeur pour c \n");
     
       printf ("d = ");
       scanf ("%c", &d);
       getchar ();
       if ((d < '0') || (d > '9'))
          printf ("choississez une autre valeur pour d \n");
     
       printf ("u = ");
       scanf ("%c", &u);
       getchar ();
       if ((u < '0') || (u > '9'))
          printf ("choississez une autre valeur pour u \n");
     
       nb = 1000 * (m - '0') + 100 * (c - '0') + 10 * (d - '0') + 1 * (u - '0');
     
       printf ("nb = %u\n", nb);
     
       return 0;
    }

  4. #4
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 869
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 869
    Par défaut
    Il a mal aux pieds Excellent

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 3
    Par défaut
    Emmanuel Delahaye c est tout a fait ca!!!!
    Merci!!!!
    Cepedant, je comprend pas le fonctionnement des boucles
    Ce qui empeche le prog de continuer, c est le getchar???
    C est ca qui fait la boucle???
    Ou c est le while?
    Merci de m aider

  6. #6
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 869
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 869
    Par défaut
    Ce que je ne comprend pas dans le code d'Emmanuel Delahaye c'est l'utilisation double de scanf et de getchar; une utilisation de getchar aurait suffit non ?

    A part ça, ce qui "fait" la boucle, c'est le do { traitements } while( condition );

    Cette structure, execute ce qui est placé entre les accolades à la suite du do, tant que la condition est vrai. Ici le test s'effectue sur "err", et quand err devient faux (donc que le test (m < '0' || m > '9') devient faux, c'est à dire qu'on a saisie un bon caractère dans la bonne plage de valeur ) on quitte la boucle.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 3
    Par défaut
    Citation Envoyé par KiLVaiDeN
    Ce que je ne comprend pas dans le code d'Emmanuel Delahaye c'est l'utilisation double de scanf et de getchar; une utilisation de getchar aurait suffit non ?

    A part ça, ce qui "fait" la boucle, c'est le do { traitements } while( condition );

    Cette structure, execute ce qui est placé entre les accolades à la suite du do, tant que la condition est vrai. Ici le test s'effectue sur "err", et quand err devient faux (donc que le test (m < '0' || m > '9') devient faux, c'est à dire qu'on a saisie un bon caractère dans la bonne plage de valeur ) on quitte la boucle.
    Jte remercie beaucoup, je comprend tout de suite mieux

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut
    J'aimerais bien que tu posts ton code une fois juste,
    je débute aussi donc ça me permettrai d'apprendre.
    Merci.

  9. #9
    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 KiLVaiDeN
    Ce que je ne comprend pas dans le code d'Emmanuel Delahaye c'est l'utilisation double de scanf et de getchar; une utilisation de getchar aurait suffit non ?
    .
    Tout à fait, mais je me suis contenté de dépanner le code original. Personnellement, j'utilise d'autres méthodes basées sur fgetc() ou fgets()...

Discussions similaires

  1. [Debutant] Oracle, c# probleme inconnu
    Par chlebta*tsotsi dans le forum C#
    Réponses: 5
    Dernier message: 16/05/2011, 17h10
  2. [CSS] probleme de debutant
    Par discogarden dans le forum Mise en page CSS
    Réponses: 21
    Dernier message: 21/12/2005, 15h54
  3. quelques problemes de debutant avec count
    Par shirya dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/09/2005, 22h14
  4. probleme de debutant sous access
    Par guili dans le forum Access
    Réponses: 8
    Dernier message: 23/06/2005, 16h39
  5. Problème pour debuter avec glut
    Par ismael14 dans le forum GLUT
    Réponses: 2
    Dernier message: 26/07/2004, 10h37

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