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 simple mais bloque !


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Japon

    Informations forums :
    Inscription : Octobre 2010
    Messages : 64
    Points : 107
    Points
    107
    Par défaut Probleme simple mais bloque !
    Bonjour,

    J'ai quelques devoirs pour l’été (je suis au Japon, l’année scolaire n'est pas la même) enfin bref voila l'énoncé :

    Faites enter à l'utilisateur la fonction un nombre entier, un nombre décimal et une lettre et affichez ce qu'il y a entre.
    J'ai donc fait ce programme :

    Code x : 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
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        int a;
        float b;
        char c;
    
        printf("整数を入力してください\n");
        scanf("%d", &a);
        printf("小数を入力してください\n"); 
        scanf("%f", &b);
    
        printf("文字を入力してください\n");
        scanf("%c", &c);
    
    
        printf("整数は : %d\n," a);
        printf("小数は : %f\n", b);
        printf("文字は : %c\n", c);
    
        return 0;
    
    }
    Bon même si c'est du japonais vous comprendrez je pense .

    Voila le problème : lorsque je fais tourner ce programme pourtant d'une simplicité enfantine, lorsque l'utilisateur a entré le nombre décimal, le programme s’arrête et ne "lit" pas la partie "lettre". J'ai découvert qu'il lisait en même temps la partie "décimale" et "lettre" alors que tout se passe bien entre la partie "nombre entier" et "nombre décimal". Et la je bloque.
    En fait il suffit à l'utilisateur d'entrer le nombre décimal suivi de la lettre. Je n'ai pas vraiment résolu le problème mais bricole le programme pour que ça soit cohérent a l’écran :

    Code x : 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
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        int a;
        float b;
        char c;
    
        printf("整数を入力してください\n");
        scanf("%d", &a);
        printf("小数と文字を入力してください\n"); //"entrez un nombre decimal et une lettre".
        scanf("%f", &b);
        scanf("%c", &c);
    
    
        printf("整数は : %d\n", a);
        printf("小数は : %f\n", b);
        printf("文字は : %c\n", c);
    
        return 0;
    
    }
    Mais j'aimerais quand même que ça soit comme j'ai voulu faire, c'est-a-dire que l'utilisateur n'ait pas a entrer le nombre décimal et la lettre en même temps. Une petite aide serait donc la bienvenue.

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,
    Commence par éviter d'utiliser des trucs comme printf, ça fait un peu viellot! Avec des truc comme cout et cin, c'est quand même plus simple et ça marche tout de suite :
    Code x : 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
    #include <iostream>
     
    int main(void)
     
    {
        int a;
        float b;
        char c;
     
        std::cout << "整数を入力してください" << std::endl;
        std::cin >> a;
        std::cout << "小数を入力してください" << std::endl;
        std::cin >> b;
        std::cout << "文字を入力してください" << std::endl;
        std::cin >> c;
     
     
        std::cout << "整数は : " << a << std::endl;
        std::cout << "小数は : " << b << std::endl;
        std::cout << "文字は : " << c << std::endl;
    
        return 0;
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Japon

    Informations forums :
    Inscription : Octobre 2010
    Messages : 64
    Points : 107
    Points
    107
    Par défaut
    Tout d'abord merci a l’équipe de corriger mes erreurs d'aiguillage .
    Heu par contre désolé pour les accents (clavier qwerty) :s. Ca vous donne du boulot donc je vais utiliser un peu le correcteur de firefox a l'avenir.

    Le probleme bertry c'est que je débute et que nous n'avons pas aborde l'utilisation de la librairie iostream :s ! Tout juste si nous venons d'aborder un peu l'utilisation de directX pour faire des petits jeux.
    Si je montre ça au prof, ça risque de faire un peu bizarre, d'autant que j'y comprends rien moi-même .

  4. #4
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Euh,... alors je connais mal voire pas du tout cette fonction ( scanf ), mais si tu tape "saisie multiple scanf" sur google tu trouves entre autres cette page.
    Il semble qu'eux, il mettent les deux saisies dans un seul scanf, de cette manière :
    Code x : 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(void)
    {
        int a;
        float b;
        char c;
    
        printf("整数を入力してください\n");
        scanf("%d", &a);
        printf("小数と文字を入力してください\n"); //"entrez un nombre decimal et une lettre".
        scanf("%f %c", &b, &c);
    
        printf("整数は : %d\n", a);
        printf("小数は : %f\n", b);
        printf("文字は : %c\n", c);
    
        return 0;
    }
    J'ai testé... et ça fonctionne correctement...

  5. #5
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    bonjour,

    tu peux créer une chaine de deux caractères (un pour le caractère tapé le second pour '\0') :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        int a;
        float b;
        char c[2];
     
        printf("A\n");
        scanf("%d", &a);
     
        printf("B\n");
        scanf("%f", &b);
     
        printf("C\n");
        scanf("%s", c);
     
     
        printf("A : %d\n", a);
        printf("B : %f\n", b);
        printf("C : %s\n", c);
     
        return 0;
     
    }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Japon

    Informations forums :
    Inscription : Octobre 2010
    Messages : 64
    Points : 107
    Points
    107
    Par défaut
    Merci a vous ! Visiblement je vais encore avoir besoin de vos services, j'ai 23 programmes a faire et la difficulte va crescendo. (desole la je peux pas mettre les accents).

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 400
    Points : 23 780
    Points
    23 780
    Par défaut
    Citation Envoyé par bertry Voir le message
    Salut,
    Commence par éviter d'utiliser des trucs comme printf, ça fait un peu viellot! Avec des truc comme cout et cin, c'est quand même plus simple et ça marche tout de suite :
    Ça c'est du C++, et ce n'est pas le même langage. Ici, c'est le forum C.

  8. #8
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Ça c'est du C++, et ce n'est pas le même langage. Ici, c'est le forum C.
    Oups!! En effet, je viens de me rendre compte que je me suis trompé, c'est le forum du C pas du C++! Toutes mes excuses...

    ( A ma décharge : il me semble que ce post a été publié dans la partie Visual C++/ C++/CLI avant d'être déplacé dans la partie C/Débuter )

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Le vrai problème ici c'est qu'à la ligne scanf("%f", &b);, l'utilisateur tape un nombre et valide par ENTREE. Or cette touche entrée génère l'émission du caractère '\n' (fin de ligne) et du coup, à la ligne scanf("%c", &c);, c'est ce '\n' qui est lu et placé dans c ! Il y a deux moyen d'éviter cela :

    1. A court terme, utiliser "% c" (remarque l'espace avant le c) au lieu de "%c". Cela va indiquer à scanf qu'il faut ignorer les caractères blancs (espaces, tabulations, fins de ligne, etc.).

    2. A long terme, avoir le réflexe de vider le buffer du clavier après chaque saisie lorsqu'il reste des caractères non lus qu'il faut ignorer. Tu as pas mal de lectures à faire pour bien comprendre le principe et l'intérêt. Ce tutoriel t'expliquera tout .

Discussions similaires

  1. [VB6]QuestionXML simple... mais je bloque...
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2006, 21h08
  2. Probleme simple, mais grave!
    Par vienin dans le forum C++
    Réponses: 15
    Dernier message: 09/12/2005, 01h05
  3. requete a 1er vue simple mais a 2em vue... :(
    Par exyacc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/03/2005, 09h05
  4. Pb de COUNT et GROUP BY simple mais sans requête imbriquées
    Par vanquish dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/10/2004, 09h45
  5. probleme simple de tab[][]
    Par vince3320 dans le forum C
    Réponses: 8
    Dernier message: 17/05/2004, 17h48

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