Faire une calculatrice : gérer les réponse
Résolu/Fermé
Dark_another
Messages postés
366
Date d'inscription
mardi 28 juin 2016
Statut
Membre
Dernière intervention
18 mars 2018
-
Modifié par Dark_another le 20/10/2016 à 18:15
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018 - 31 août 2017 à 13:21
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018 - 31 août 2017 à 13:21
A voir également:
- Faire une calculatrice : gérer les réponse
- Calculer une moyenne sur excel - Guide
- Installer calculatrice sur mon portable - Télécharger - Calcul & Conversion
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Ma-calculatrice - Télécharger - Calcul & Conversion
- Comment éteindre une calculatrice casio ✓ - Forum Matériel & Système
3 réponses
remsprogramm
Messages postés
15
Date d'inscription
samedi 8 octobre 2016
Statut
Membre
Dernière intervention
16 juillet 2017
2
15 juil. 2017 à 17:58
15 juil. 2017 à 17:58
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.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
25 juil. 2017 à 17:12
25 juil. 2017 à 17:12
Ç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
Dark_another
Messages postés
366
Date d'inscription
mardi 28 juin 2016
Statut
Membre
Dernière intervention
18 mars 2018
5
26 juil. 2017 à 13:52
26 juil. 2017 à 13:52
En effet, j'avais oublié ça lorsque j'ai réécrit le programme, veuillez m'en excuser
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
Modifié le 27 juil. 2017 à 19:00
Modifié le 27 juil. 2017 à 19:00
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.
Dark_another
Messages postés
366
Date d'inscription
mardi 28 juin 2016
Statut
Membre
Dernière intervention
18 mars 2018
5
1 août 2017 à 19:34
1 août 2017 à 19:34
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.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
>
Dark_another
Messages postés
366
Date d'inscription
mardi 28 juin 2016
Statut
Membre
Dernière intervention
18 mars 2018
2 août 2017 à 01:21
2 août 2017 à 01:21
Quand le compilateur indique une erreur, il indique aussi la ligne et la position exacte de l'erreur. J'ai essayé le code qui est ok chez moi, on lit des données dans un buffer constant donc des pointeurs const sont adaptés, il faut la ligne où est l'erreur.
Dark_another
Messages postés
366
Date d'inscription
mardi 28 juin 2016
Statut
Membre
Dernière intervention
18 mars 2018
5
>
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
2 août 2017 à 14:15
2 août 2017 à 14:15
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.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
2 août 2017 à 20:40
2 août 2017 à 20:40
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 );
Dark_another
Messages postés
366
Date d'inscription
mardi 28 juin 2016
Statut
Membre
Dernière intervention
18 mars 2018
5
>
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
3 août 2017 à 20:15
3 août 2017 à 20:15
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);
}
16 juil. 2017 à 12:55
16 juil. 2017 à 13:02
Il y a 9 mois peut être, mais j'espère pour lui(elle), qu'il a trouvé une solution depuis
25 juil. 2017 à 15:21
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.
27 juil. 2017 à 16:13
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 :