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] Convertir un charactere en entier


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut [debutant] Convertir un charactere en entier
    Bonjour, aprés avoir cherché dans la faq et dans des livres et cours de c++, j'arrive pas à trouver quelque chose qui doit être finalement assez bateau...

    Mon programme invite l'utilisateur à entrer une valeur numerique de type double, et je cherche à vérifier si cette valeur est bien de type double ou pas char afin de le réinviter à saisir la valeur si elle est pas de type double.
    Sinon ça me donne des résultats bizarre par la suite.

    Je suis parti du principe que l'on pouvait comparer un double et un char, mais ça n'a pas l'air de fonctionner, donc si quelqu'un pouvait m'orienter, soit en me disant comment effectuer la convertion soit quel autre chemin adopter, je lui en serait reconnaissant!

    if (devises=='e')
    { euro:
    cout << "Veuillez entrer le montant en euros : ";
    double euro;
    cin >> euro;
    if ((double)euro!=euro)
    { cout << "Votre montant en dollars : ";
    double repe = euro*coursED;
    cout << repe <<endl;
    }
    else
    { goto euro;
    }
    Voila mon code, le deuxieme if n'est pas valide, c'est là que se pose mon probléme...

    merci d'avance

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    salut

    oulah attends, le cout est capable de détecter lui-même lel type que tu lui passes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	double d;
     
    	if (cin >> d)
    	{
    		cout << "double" << endl;
    	}
    	else
    	{
    		cout << "pas double" << endl;
    	}
    de plus, ta condition est bizarre, tu compares euro avec lui-même.

    NOTE : n'utilise pas de goto

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    http://c.developpez.com/faq/cpp/?pag...#SL_cin_verify

    NOTE : n'utilise pas de goto
    Et surtout n'utilise pas le même nom pour une étiquette et une variable.

  4. #4
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Le deuxième if ne peut pas fonctionner en effet :
    - La variable "euro" est un double.
    - Par conséquent : (double) euro == euro dans tous les cas.

    Pour le traitement qui t'intéresse, le principe est le suivant : la ligne
    envoie dans euro (un double) le contenu du buffer du flot d'entrée cin.
    Si le contenu est interprétable comme un double, tout se passe bien. Sinon, le flot cin sera en erreur.
    Il faut donc tester l'état de cin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double euro;
    cin >> euro;
    if ( cin.good() ) {
      // la saisie est valable
    }
    else {
      // erreur de saisie
    }
    NB : pour plus d'infos, voir la documentation sur basic_ios (la classe mère de basic_istream, dont cin est une instance).

  5. #5
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Oups, superposition de réponses...
    NB : L'écriture conformément à ce qui est proposé dans le lien donné par Loulou24, est d'ailleurs plus classique (et plus claire aussi...) que celle de mon post ci-dessus.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut
    j'ai essayé ce que vous m'avezconseillé.
    voila ce que ça donne pour le test :
    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
    bool choice(double valeur)
     
      {    while(!(cin >> valeur) || valeur<=0)
             {   if(cin.eof())
                { return false;
                }
                else if (cin.fail())
                { cout<<"Saisie incorrecte, veuillez recommencer : ";
                cin.clear();
                cin.ignore( numeric_limits<streamsize>::max(), '\n');
                }
                else
                { cout<<" La valeur est toujours incorrecte, recommencez : ";
                }
             } 
             return true;
      }
    Le probléme c'est que si je le fais au cas par cas ça marche mais ça fait se repeter le meme code, alors que si je tente de le mettre avant la fonction main, là ça marche plus. Je peu compiler, mais le programme lorsqu'il arrive à l'appel du test ci dessus s'arrete...

    pour être plus précis, le programme rejette les valeurs qui ne sont pas des entiers ou des doubles donc ça c'est bon.
    mais pour l'operation qui suit il s'arrete et le deboggueur m'aide pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      cout << "Veuillez entrer le montant en euros : ";
             double euro;
             if (choice(euro))
             { cout << "Votre montant en dollars : ";
               double repe = euro*coursED;
               cout << repe <<endl;
             }
    coursED etant un double définit précedement dans mon programme

Discussions similaires

  1. Réponses: 24
    Dernier message: 04/10/2006, 14h42
  2. convertir du texte en entier
    Par Lenaick dans le forum C++Builder
    Réponses: 19
    Dernier message: 16/02/2006, 10h24
  3. [debutant]Convertir un pointeur byte en String
    Par patmaba dans le forum SL & STL
    Réponses: 3
    Dernier message: 22/07/2005, 13h34
  4. [Débutant(e)]convertir un string en entier
    Par harris_macken dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2005, 07h20
  5. Réponses: 3
    Dernier message: 28/09/2003, 10h46

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