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 :

[debutant]prog fonctionne pas mais pas d'erreurs


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 30
    Points
    30
    Par défaut [debutant]prog fonctionne pas mais pas d'erreurs
    bonjour,

    Voilà mon petit prog

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
     float a,b;
     
    printf("ecrivez deux nombres a virgules\n",a,b);
    scanf("%d%d",&a,&b);
     
    if (a<b)
       {
            printf("Le plus petit est %d et donc le plus grand est %d\n",a,b);  
       }
    else printf("Le plus petit est %d et donc le plus grand est %d\n",b,a);
     
    system("PAUSE");
    }
    Quand j'ecris 5 [enter] et 7 [enter] cela me donne un resultat delirant...
    Avec des virgules : j'ecris 5.5 [enter] et là il me donne le resultat sans attendre le deuxieme chiffre, comme si la virgules separait mon chiffre en deux..

    Une idée ? merci

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Le specificateur de format pour un flottant est %f, pas %d.

  3. #3
    Membre habitué Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Points : 133
    Points
    133
    Par défaut
    En effet il faut remplacer les %d par des %f pour saisir des floats, mais de plus je te conseillerais de separer les saisies des 2 nombres pour eviter toute complication (bah oui le scanf ... )

    ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    printf("Merci de saisir le premier nombre :\n");
    scanf("%f",&a);
    printf("Merci de saisir le deuxieme nombre :\n");
    scanf("%f",&b);

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Merci pour les infos...

    Par contre je comprends pas la remarque sur le scanf...

  5. #5
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par skip78
    je te conseillerais de separer les saisies des 2 nombres pour eviter toute complication (bah oui le scanf ... )
    Ben non, scanf() va lui poser probleme _si_ il y a deux appels, car le '\n' du premier nombre restera dans le buffer pour la lecture du second nombre.

  6. #6
    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 : 67
    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 skip78
    En effet il faut remplacer les %d par des %f pour saisir des floats, mais de plus je te conseillerais de separer les saisies des 2 nombres pour eviter toute complication (bah oui le scanf ... )

    ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    printf("Merci de saisir le premier nombre :\n");
    scanf("%f",&a);
    printf("Merci de saisir le deuxieme nombre :\n");
    scanf("%f",&b);
    Il faudrait surtout utiliser autre chose que scanf()...

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre habitué Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Points : 133
    Points
    133
    Par défaut
    Oui c`est vrai que meme comme ca ca pose probleme le scanf
    Bah tu fait un petit fflush(stdin) avant chaque scanf et ca devrait aller (c`est une fonction qui vide le buffer (et supprime ainsi les \n restants dont on parlais a l`instant.))

    Sinon tu passes au c++ et tu utilises cin

  8. #8
    Membre habitué Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Points : 133
    Points
    133
    Par défaut
    Enfin voila j`ai pas verifie mais a priori ceci devrait fonctionner :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
     float a,b;
     
    printf("Merci de saisir le premier nombre\n");
    fflush(stdin);
    scanf("%f",&a);
     
    printf("Merci de saisir le deuxieme nombre\n");
    fflush(stdin);
    scanf("%f",&b);
     
    if (a<b)
       {
            printf("Le plus petit est %f et donc le plus grand est %f\n",a,b);  
       }
    else printf("Le plus petit est %f et donc le plus grand est %f\n",b,a);
     
    system("PAUSE");
    }
    @Emmanuel : certes l`utilisation de scanf est delicate mais bon pour un programme si simple je pense qu`en prenant les dispositions necessaires ca reste le plus evident non ?

  9. #9
    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 : 67
    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 skip78
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fflush(stdin);
    scanf("%f",&a);
    Non.

    fflush() n'est défini que pour les flux sortants.
    scanf() n'est pas une fonction de débutant.


    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers
    Pas de Wi-Fi à la maison : CPL

  10. #10
    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 : 67
    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 skip78
    Oui c`est vrai que meme comme ca ca pose probleme le scanf
    Bah tu fait un petit fflush(stdin) avant chaque scanf
    Non.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Pour les scanf, on va dire que j'ai pas le choix, j'apprend le c... et pour les exos, ondemande d'utiliser scanf et parfois gets.

    Mais merci pour les liens... ca permet d'apprendre...

  12. #12
    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 skip78
    Oui c`est vrai que meme comme ca ca pose probleme le scanf
    Bah tu fait un petit fflush(stdin) avant chaque scanf et ca devrait aller (c`est une fonction qui vide le buffer (et supprime ainsi les \n restants dont on parlais a l`instant.))

    Sinon tu passes au c++ et tu utilises cin
    On ne fait jamais et on ne dois jamais faire de fflush sur stdin. Selon la norme, le comportement est indéfini lorsqu'on passe un flux entrant à la fonction fflush.

    Ce point revient souvent sur ce forum!!! Quant à scanf, je ne l'utilise jamais et remplace son utilisation par fgets/sscanf ou des fonctions d'entrée sécurisées personnailsées comme celles décrites par exemple sur le site d'Emmanuel (voir plus haut, à lire absolument pour progresser en C).

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  13. #13
    Membre habitué Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Non.

    fflush() n'est défini que pour les flux sortants.
    scanf() n'est pas une fonction de débutant.


    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers
    Citation Envoyé par mujigka
    On ne fait jamais et on ne dois jamais faire de fflush sur stdin. Selon la norme, le comportement est indéfini lorsqu'on passe un flux entrant à la fonction fflush.

    Bon bah du coup j`ai verifie parce que vous m`avez mis le doute, mais ca fonctionne parfaitement

    je ne vois donc pas pourquoi il ne faut pas proceder ainsi ??

    P.S. brouette si tu veut n`afficher que 2 chiffres apres la virgule par exemple, tu peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("a = %.2f\n",a);
    je dis ca parce que je me souviens avoir galere pour trouver

  14. #14
    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 ~Brouette~
    Pour les scanf, on va dire que j'ai pas le choix, j'apprend le c... et pour les exos, ondemande d'utiliser scanf et parfois gets.

    Mais merci pour les liens... ca permet d'apprendre...
    gets, c'est pas mieux que scanf. Ne jamais utilser gets, mais fgets!

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #15
    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 skip78
    Bon bah du coup j`ai verifie parce que tu mas mis le doute, mais ca fonctionne parfaitement

    P.S. si tu veut n`afficher que 2 chiffres apres la virgule par exemple, tu peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("a = %.2f\n",a);
    je dis ca parce que je me souviens avoir galere pour trouver
    Qu'est ce qui fonctionne parfaitement, fflush(stdin)? Peut-être sur ton système, mais c'est un comportement indéfini selon la norme du langage. Donc, pas de fflush(stdin).

    Quant à scanf, c'est une fonction réservée aux spécialistes et aux gourous. Le tutoriel suivant te donnera un apperçu de sa complexité et des enjeux liés à son utilisation:

    http://xrenault.developpez.com/tutoriels/c/scanf/

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par mujigka
    gets, c'est pas mieux que scanf. Ne jamais utilser gets, mais fgets!

    Thierry
    C'est ce que certains membres du forum m'avait précisé il y'a quelques temps.

    skip78 merci pour l'info printf("a = %.2f\n",a);

  17. #17
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par skip78
    Bon bah du coup j`ai verifie parce que vous m`avez mis le doute, mais ca fonctionne parfaitement

    je ne vois donc pas pourquoi il ne faut pas proceder ainsi ??
    http://man.developpez.com/man3/fflush.3.php
    Citation Envoyé par man de fflush
    La fonction fflush force l'écriture de toutes les données se trouvant dans les buffers de l'espace utilisateur, et met à jour le flux à travers la fonction sous-jacente d'écriture. Le statut d'ouverture du flux n'est pas affecté.
    Et on n'écrit pas dans un flux entrant, que je sache...
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  18. #18
    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 skip78
    je ne vois donc pas pourquoi il ne faut pas proceder ainsi ??
    Il se peut que selon ton implémentation, l'appel à fflush(stdin) fonctionne comme tu t'y attends, mais le langage C ne garantit rien à ce sujet.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  19. #19
    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 : 67
    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 ~Brouette~
    Pour les scanf, on va dire que j'ai pas le choix, j'apprend le c... et pour les exos, ondemande d'utiliser scanf et parfois gets.
    Mais c'est quoi cette école ?

    Va falloir que ça change...
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2006
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Mais c'est quoi cette école ?

    Va falloir que ça change...
    Cette école c'est le CNAM...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. macro ne fonctionne pas mais pas msg d'erreur
    Par Nonomimie dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/12/2014, 21h20
  2. creation de synonym impossible mais pas de message d'erreur
    Par breizh76 dans le forum Administration
    Réponses: 1
    Dernier message: 03/11/2009, 14h53
  3. Echec de transfert par FTP mais pas de retour d'erreur
    Par kernigansnotdead dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/02/2008, 20h12
  4. [MySQL] Fonctionne bien mais pas tout le temps
    Par dlamo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/08/2007, 20h04
  5. [FTP] Warning avec ftp_get, mais pas de message d'erreur
    Par NomUtilisateurDejaPris dans le forum Langage
    Réponses: 2
    Dernier message: 22/02/2006, 18h12

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