Faire une calculatrice : gérer les réponse
Résolu
Dark_another
Messages postés
366
Date d'inscription
Statut
Membre
Dernière intervention
-
Dark_another Messages postés 366 Date d'inscription Statut Membre Dernière intervention -
Dark_another Messages postés 366 Date d'inscription Statut Membre Dernière intervention -
Bonjour, bonsoir,
Je fais une calculatrice en console et je voudrais gérer les réponse utilisateur (du genre qu'il doit écrire"5" au lieu de ce qu'il marque (comme "lol"). Donc je voudrais gerer ça. J'accepterais les réponses et vous remercie d'avance.
Je fais une calculatrice en console et je voudrais gérer les réponse utilisateur (du genre qu'il doit écrire"5" au lieu de ce qu'il marque (comme "lol"). Donc je voudrais gerer ça. J'accepterais les réponses et vous remercie d'avance.
A voir également:
- Faire une calculatrice : gérer les réponse
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Installer calculatrice - Télécharger - Calcul & Conversion
- Calculer une moyenne sur excel - Guide
- Ma-calculatrice - Télécharger - Calcul & Conversion
- Calculatrice windows 7 - Télécharger - Calcul & Conversion
3 réponses
Bonjour,
Tu dois faire une condition en vérifiant que ce qu'à écrit l'utilisateur est compris entre tel ou tel nombre, comme ça, s'il met des lettre, la condition sera fausse et tu affichera un message avec un else.
En espérant t'avoir aider, je te souhaite une bonne fin de journée.
Tu dois faire une condition en vérifiant que ce qu'à écrit l'utilisateur est compris entre tel ou tel nombre, comme ça, s'il met des lettre, la condition sera fausse et tu affichera un message avec un else.
En espérant t'avoir aider, je te souhaite une bonne fin de journée.
Ça c'est un code erroné qui ne compile pas. Il faut remplacer la ligne :
if (Op >=1 && <= 15){// qui n'a pas de sens par :
if ( Op >= 1 && Op <= 15 ) {// qui effectue le bon test
Pour vérifier qu'une saisie est bien un nombre entier valide.
On doit
On doit
// commencer par lire toute la ligne sous forme d'une chaîne de caractères std::string reponse; std::getline( std::cin , reponse ); // puis on analyse la chaîne pour vérifier si elle ne contient que des chiffres const char* pt = reponse.c_str(); while ( std::isspace( *pt ) ) { ++pt; // ne pas lire d'éventuels espaces au début } if ( *pt == '\0' ) { std::cout << "la ligne est vide\n"; } else if ( *pt < '0' || *pt > '9' ) { std::cout << "ça n'est pas un nombre\n"; } else { // ensuite on convertit la chaîne en nombre const char* fin; unsigned nombre = std::strtoul( pt , &fin , 10 ); // essai de lecture while ( std::isspace( *fin ) ) { ++fin; // ne pas lire d'éventuels espaces à la fin } if ( *fin != '\0') { std::cout << "il y du texte après le nombre\n"; } else { // pour finalement tester si elle est dans les limites attendues if ( nombre < minimumAttendu ) { std::cout << "le nombre est plus petit que " << minimumAttendu << "\n"; } else if ( nombre > maximumAttendu ) { std::cout << "le nombre est plus grand que " << maximumAttendu << "\n"; } else { std::cout << "c'est ok !" << std::endl; } } }Le mieux est de mettre tout cela dans une fonction.
Bonjour, désolé pour le temps d'attente.
Je te remercie pour le code que tu as mis mais le problème est que çane se compile pas et ça indique : error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
J'ai tout d'abord pensé à un problème de constante, donc au lieu d'avoir
Je te remercie pour le code que tu as mis mais le problème est que çane se compile pas et ça indique : error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
J'ai tout d'abord pensé à un problème de constante, donc au lieu d'avoir
const char*pt = reponse.c_str(); const char* fin;il y a
char* pt = reponse.c_str(); char* fin;mais ça indique le même message d'erreur. serai-ce à cause de c_str(); qui est constant ? Je vous remercie de bien vouloir m'éclairer là-dessus.
Le compilateur me donnait au début cette ligne là :
unsigned nombre = strtoul( pt , &fin , 10 ); // essai de lectureavec ce message :
error: invalid conversion from 'const char**' to 'char**' [-fpermissive] note: initializing argument 2 of 'long unsigned int strtoul(const char*, char**, int)J'ai cru comprendre qu'en général, les erreurs "fpermissive" de code::bocks sont à cause de constantes qui peuvent être modifiées, donc j'ai modifié les lignes indiqué au dessus.
En effet, la norme donne le prototype
ici il faudrait contourner par
unsigned long strtoul( const char *str, char **str_end, int base );curieux en C++ (car
*str_endsera mis à jour à partir de
strqui est
const char*), surement dû au fait que c'est en réalité une fonction C.
ici il faudrait contourner par
unsigned nombre = strtoul( pt , const_cast<char**>(&fin) , 10 );
Cela règle certes le problème, mais si on fait une fonction contenant ça, va comprendre pourquoi le compilateur bug, en me disant que bool x est créé mais pas utilisé, alors que un peu plus loin il y a
x == true;. De plus, en essayant de régler le problème, j'ai vu un autre bug empêchant l'utilisateur d'entrer des chiffres et des nombres, ça dit <<ce n'est pas un nombre>> ou encore <<la ligne est vide !>>. J'ai donc cherché une autre solution et j'ai trouvé plus simple :
if (!(cin, x)){
cout<<Merci de bien mettre un CHIFFRE ou un NOMBRE, PAS une LETTRE ou un MOT !\n";
cin.clear();
cin.ignore(1);
}
Il y a 9 mois peut être, mais j'espère pour lui(elle), qu'il a trouvé une solution depuis
Whimeri : non, malheureusement ...
remsprogramm : j'ai essayé ce que vous m'avez dis de faire, mais le problème est que ça ne marche pas
exemple :
Et ça ne sort rien de ce que j'ai demandé, ça fait juste appel à ce qu'il trouve dans le programme.
code *corrigé par rapport à la ligne*
ce que va rentré l'utilisateur + la sortie
indéfiniment.
Donc comment peut t'on régler ça pour que ça sorte :