Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2571 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Petit problème lors de la récupération de donnée.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petit problème lors de la récupération de donnée.

n°1394965
Willits
La réponse est 42
Posté le 26-06-2006 à 14:28:35  profilanswer
 

Salut à tous,
 
Voilà, je débute le C++, et je me suis lancé dans un logiciel assez basique, une petite calculette en ligne de commande.
Mais, je rencontre un petit problème.
 
Voici mon code :

Code :
  1. #include <iostream>
  2. using namespace std;
  3. char GetCalcType(void); // Declaring GetCalcType
  4. int main(int argc, char *argv[])
  5. {
  6. cout << "Calculette basique en C++." << endl << endl; //Hello world :)
  7. cout << "Que voulez vous faire ?" << endl <<
  8.   " Une addition : +" << endl <<
  9.   " Une soustraction : -" << endl <<
  10.   " Une multiplication : *" << endl <<
  11.   " Une Division : /";
  12. char iOperator = GetCalcType();
  13. cout << "Debug : je récupère ça : " << iOperator << endl;
  14. return 0;
  15. }
  16. char GetCalcType(void) // Cette fonction récupère et retourne l'opérateur pour le calcul.
  17. {
  18. char cReturn;
  19. while (1) // Boucle infinie
  20. {
  21.  cout << endl << "Entrez une valeur : ";
  22.  cin >> cReturn;
  23.  if ((cReturn == '+') || (cReturn == '-') || (cReturn = '/') || (cReturn ='*'))
  24.   return cReturn;
  25.  if ((cReturn = 'q') || (cReturn = 27))
  26.   return 'q';
  27. }
  28. }


 
Voilà, ce problème n'est pas terminé car j'ai un bug.
Dans GetCalcType(), j'ai une boucle infinie, qui normalement doit s'executer tant qu'elle n'est pas quittée.
Or, quand je lance le programme, et si je met une autre valeur que "+" ou "-", il me retourne "/"  :heink: (et la boucle est quittée)
 
Donc ma question : où est le bug ? car moi je ne le vois pas. (le C++ ne s'aurait t'il pas gérer plus d'un seul ou ?)
 
Je vous remercie.

mood
Publicité
Posté le 26-06-2006 à 14:28:35  profilanswer
 

n°1394974
_darkalt3_
Proctopathe
Posté le 26-06-2006 à 14:36:11  profilanswer
 
n°1394987
Taz
bisounours-codeur
Posté le 26-06-2006 à 14:43:52  profilanswer
 

cReturn = '/') || (cReturn ='*')) ...

n°1394991
Willits
La réponse est 42
Posté le 26-06-2006 à 14:51:12  profilanswer
 


 
Très subtil.
 
Taz, quel est le problème avec ça : cReturn = '/') || (cReturn ='*')) ?
 
(Je débute excusez moi, je découvre)

n°1394995
turn3r
Un clavier azerty en vaut 2
Posté le 26-06-2006 à 14:56:56  profilanswer
 

Ben essaye avec
(cReturn == '/') || (cReturn =='*'))
 
car cReturn ='/' est toujours vrai donc il sort et te return "/"
 
[:azka]


Message édité par turn3r le 26-06-2006 à 14:59:37
n°1394999
Willits
La réponse est 42
Posté le 26-06-2006 à 15:00:56  profilanswer
 

Merci turn3r, en effet j'ai fait une erreur de prog, et je n'ai pas encore assez d'expérience pour voir ce genre de problème à la con.
 
Maintenant, un autre petit problème, quand je ne met rien et que je fais la touche entrer, ça part dans une boucle infinie, une idée pour contrer ça ?

n°1395000
_darkalt3_
Proctopathe
Posté le 26-06-2006 à 15:02:57  profilanswer
 

Ben passe ton debugger déjà pour voir où ca te mène dans ton programme, ca t'aidera :)

n°1395012
skelter
Posté le 26-06-2006 à 15:10:17  profilanswer
 

Willits a écrit :

Merci turn3r, en effet j'ai fait une erreur de prog, et je n'ai pas encore assez d'expérience pour voir ce genre de problème à la con.


 
ce genre d'erreur peut s'eviter en evitant de mettre une l-value comme opérande de gauche

Code :
  1. ('/' = cReturn) // erreur a la compilation

n°1395019
Willits
La réponse est 42
Posté le 26-06-2006 à 15:18:04  profilanswer
 

Ok, merci skelter, je retien.
 
Par contre j'ai compris pour le problème de la boucle infinie, ce n'est pas un blem de boucle infinie. C'est juste cin qui bloque tant qu'il n'a pas reçu de valeur. Il n'y a pas un moyen pour que quand l'utilisateur fasse la touche Entrer sans aucun caractère, qu'il n'y ai pas de saut de ligne ou alors que le texte réapparaise ("Entrez une valeur : " ) ?


Message édité par Willits le 26-06-2006 à 15:18:32
n°1395035
skelter
Posté le 26-06-2006 à 15:34:06  profilanswer
 

tu prompt, comme un shell par exemple
 

Code :
  1. const string prompt = "Entrez une valeur : ";
  2. cout << prompt;
  3. string line;
  4. while( getline(cin, line) )
  5. {
  6. /*
  7. traitement de ce qu'il y a dans line
  8. avec un std::istringstream par exemple
  9. */
  10. cout << prompt;
  11. }


Message édité par skelter le 26-06-2006 à 19:18:00
mood
Publicité
Posté le 26-06-2006 à 15:34:06  profilanswer
 

n°1395101
Taz
bisounours-codeur
Posté le 26-06-2006 à 16:23:58  profilanswer
 

pas la peine de flusher là, on est en C++, on est pas de baltringues, cin et cout son tie'd

n°1395144
Willits
La réponse est 42
Posté le 26-06-2006 à 16:57:32  profilanswer
 

Taz a écrit :

pas la peine de flusher là, on est en C++, on est pas de baltringues, cin et cout son tie'd


 
?

n°1395244
skelter
Posté le 26-06-2006 à 19:17:44  profilanswer
 

Taz a écrit :

pas la peine de flusher là, on est en C++, on est pas de baltringues, cin et cout son tie'd


 
a ouai le con, merci  :jap:  j'ai edité

n°1395248
Taz
bisounours-codeur
Posté le 26-06-2006 à 19:29:11  profilanswer
 

mais à part les =, le code initial fonctionne très bien.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Petit problème lors de la récupération de donnée.

 

Sujets relatifs
Problème image quelques fois affiché sous IE mais pas tout le tempsProbleme CSS avec Firefox
problème vis a vis d'une requête sql par phpRécupération d'applet java ?
Problème avec les polygones en openglProblème avec une petite application RMI en java
Problème d&#8217;écriture dans un fichier avec Java (Applet)Problème #include et cout
probleme avec gridbaglayout[résolu]Problème avec scanf
Plus de sujets relatifs à : Petit problème lors de la récupération de donnée.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR