DevilBTB
Messages postés6Date d'inscriptiondimanche 20 avril 2008StatutMembreDernière intervention17 juillet 2008
-
4 juil. 2008 à 13:31
DevilBTB
Messages postés6Date d'inscriptiondimanche 20 avril 2008StatutMembreDernière intervention17 juillet 2008
-
17 juil. 2008 à 21:44
Salut!
J apprend le C++, et j ai les bases des bases du C.
Je suivais un tuto pour apprendre d autre fonction et instruction, et j ai essayer de faire la calculatrice du tuto. Et j essaye de prendre de bonne habitudes pour les commentaires. Les tutos sont tres biens , mais j ai du faire une erreur je sais pas ou -___-
Mais quand je tape le premier nombre la verification me dit que le nombre n est pas correcte. "vous n'avez pas rentre un nombre correct"
Fonction permettant la vérification de la saisie utilisateur
**********************************/
void Verification_Saisie(int Choix)
{
//Fonction permettant un choix pour une verification de la saisie en fonction de l'argument nombre : 1 ou signe : 2
switch (Choix)
{
[i][b] case 1:
//Nous définissons qu'il y a une erreur pour la première saisie avant vérification
Erreur = true;
//Boucle tant qu'il y a une erreur
while(Erreur == true)
{
//Définissons qu'il n'y a pas de décimal de mise avant la vérification
Decimal = false;
//Teste la saisie caractere apres caractere
for(int i = 0; i < 10; i++)
{
//test si nous rencontrons la fin de la saisie
if(int (nombre[i]) == 0)
{
//Il n'y a pas d'erreur
Erreur = false;
//Fin de verification de saisie
break;
}
//Sinon, on teste si le caractere est un chiffre
else if(int(nombre[i]) > 47 and int(nombre[i]) < 58)
//Il n'y a pas d'erreur
Erreur = false;
//Sinon, on teste si le caractere est un point et s'il n'y en a déja pas un
else if(int(nombre[i]) == 46 and Decimal == false)
{
//Il n'y a pas d'erreur,
Erreur = false;
//Nous ne pourrons plus mettre de point
Decimal = true;
}
//Sinon, il y a une erreur
else
Erreur = true;
//Si il y a une erreur, nous sortons de la vérification de saisie
if(Erreur == true)
break;
}
//Si il y a une erreur, nous demandons de rentrez un nouveau nombre
if(Erreur == true)
{
cout << "vous n'avez pas rentre un nombre correct" << endl;
cout << "entrez un nombre correct" << endl;
Saisie_Utilisateur(1);
}
}
break;
case 2:
//Nous définissons qu'il y a une erreur pour la première saisie avant vérification
Erreur = true;
//Boucle tant qu'il y a une erreur
while(Erreur == true)
{
//Teste si le caractere est un operateur reconnu if(signe '+' or signe '-' or signe == '*' or signe == '/')
{
//il n'y a pas d'erreur
Erreur = false;
}
//Sinon, il y a une erreur
else
{
Erreur = true;
}
//Si il y a une erreur, nous demandons de rentrez un nouvel operateur
if(Erreur == true)
{
cout << "vous n'avez pas rentre un operanteur correct" << endl;
cout << "entrez un operateur correct" << endl;
Saisie_Utilisateur(2);
int main()
{
/**************************************
Définition et initialisation des variables
**************************************/
// Variable contenant le resultat de l'opération
double resultat = 0.0;
//Variable contenant le signe de l'opération
char signe = '0';
/**************************************
Corps de la fonction
**************************************/
// Fonction permettant de saisir le premier nombre
cout << " Nivek25 Calc 2008 V0.2b" << endl;
cout << "Entrez le premier nombre " << endl;
Saisie_Utilisateur(1);
//Fonction de vérification de la saisie
Verification_Saisie(1);
// Fonction permettant de saisir le signe de l'opération
cout << "Saisissez le signe de l'operation ( + - / * ) " << endl;
Saisie_Utilisateur(2);
//Fonction de verification de la saisie
Verification_Saisie(2);
// Fonction permettant de saisir le second nombre
cout << "Entre le second nombre " << endl;
Saisie_Utilisateur(1);
//Fonction de vérification de la saisie
Verification_Saisie(1);
// Déterminer le signe de l'opération
if (signe == '+')
{
resultat = nombre[0] + nombre[1];
}
// Affichage du résultat obtenu
cout << "Le resultat est " << resultat << endl;
system("PAUSE");
return 0;
}
[glow=red,2,300]J ai surligné l'erreur en rouge. L'erreur me dit : no match for 'operator>>' in 'std::cin >> nombre'//////////////////////////////////////////////////////////glow
Et en gras italique, c est ou je dois avoir le problème. Le truc c est que j ai vérifié sur le tuto, a part les noms des variables qui changent, la fonction si vous la voyez pas c est : void Verification_Saisie(int Choix)
DevilBTB
Messages postés6Date d'inscriptiondimanche 20 avril 2008StatutMembreDernière intervention17 juillet 2008 17 juil. 2008 à 21:44
Me revoila pour donner de mes nouvelles sur se début de programme. Je l ai abandonner, et se matin j ai décidé de le remodeler, et d ajouter des fonctions.
J ai supprimer le probleme en le supprimant vraiment looooool
Mais j y ai ajouter d autre fonctionnalité, comme un menu et un calculateur de moyenne sans coef (je verrai pour en mettre plus tard, je trouve pas le moyen d en mettre).
Voila le fichier : main.cpp
/**************************************
Programme : Nivek25 Calc 2008
Fichier : main.cpp
Créateur : Nivek25
Mail : nivek25@live.fr
Creation : 3/07/2008
Logiciel : Code::Blocks 8.02
Version : 1.0a
Modification : 17/07/2008
**************************************/
/**************************************
Ce programme fait partie d'un
tutoriel de CPPFrance, pour apprendre
en appliquant les bases du C++
Et des idées de moi meme
**************************************/
/**************************************
Fichiers à inclure
**************************************/
#include
#include <cstdlib>
#include "main.h"
/**************************************
Utilisation de l'espace de noms standards
**************************************/
using namespace std;
/**************************************
Fonction pour quitter le programme
***************************************/
int quitter()
{
return 0;
}
/**************************************
Fonction de : refaire un calcul, retour au menu et quitter le programme
***************************************/
void retourBase()
{
int choix=0;
cout << "\n\n\t\t1 - Refaire un calcul\n\t\t2 - Retour au menu\n\t\t3 - Quitter le programme\n\n" << endl;
cout << "\t Votre choix : ";
cin >> choix;
if (choix == 1)
{
base();
}
else if (choix == 2)
{
choixMenu();
}
else if (choix == 3)
{
quitter();
}
else
{
retourBase();
}
}
/**************************************
Fonction de : refaire un calcul (moyenne) , retour au menu et quitter le programme
***************************************/
void retourMoyenne()
{
int choix=0;
cout << "\t\t1 - Refaire un calcul\n\t\t2 - Retour au menu\n\t\t3 - Quitter le programme\n\n" << endl;
cout << "\t Votre choix : ";
cin >> choix;
if (choix == 1)
{
moyenne();
}
else if (choix == 2)
{
choixMenu();
}
else if (choix == 3)
{
quitter();
}
else
{
retourMoyenne();
}
}
A voir pour d'autre idée de menu une prochaine fois
***************************************/
void menu(int menuChoix)
{
//Boucle de type switch, permet de faire un choix donc un menu
switch (menuChoix)
{
case 1:
{
cout << "\n\t\tCalcul de base\n\n";
base();
break;
}
case 2:
{
cout <<"\n\t\tCalcul de moyenne\n\n";
moyenne();
break;
}
case 3:
{
cout << "\n\t\tAu revoir\n\n";
quitter();
break;
}
//Default : C est si l'utilisateur du programme entre un choix autre que 1 , 2 et 3
default:
{
cout << "Fausse manipulation\n\n" << endl;
choixMenu();
//Ce break est facultatif car c'est la derniere case.
break;
}
Je suis assez content, c est le premier programme qui aboutit a un truc un peu util lol.
Dites m en se que vous en pensez ^^
Je l ameliorai plus tard quand j aurai le savoir suffisant lol et si il y a des bugs dites le moi ici. A priori aucun bug n est apparu (je l ai tester suffisament pour dire qu il n y a pas de bug ^^ mais on sait jamais lol)
Fonction permettant la vérification de la saisie utilisateur
**********************************/
void Verification_Saisie(int Choix)
{
//Fonction permettant un choix pour une verification de la saisie en fonction de l'argument nombre : 1 ou signe : 2
switch (Choix)
{
case 1:
//Nous définissons qu'il y a une erreur pour la première saisie avant vérification
Erreur = true;
//Boucle tant qu'il y a une erreur
while(Erreur == true)
{
//Définissons qu'il n'y a pas de décimal de mise avant la vérification
Decimal = false;
//Teste la saisie caractere apres caractere
for(int i = 0; i < 10; i++)
{
//test si nous rencontrons la fin de la saisie
if(int (nombre[i]) == 0)
{
//Il n'y a pas d'erreur
Erreur = false;
//Fin de verification de saisie
break;
}
//Sinon, on teste si le caractere est un chiffre
else if(int(nombre[i]) > 47 and int(nombre[i]) < 58)
//Il n'y a pas d'erreur
Erreur = false;
//Sinon, on teste si le caractere est un point et s'il n'y en a déja pas un
else if(int(nombre[i]) == 46 and Decimal == false)
{
//Il n'y a pas d'erreur,
Erreur = false;
//Nous ne pourrons plus mettre de point
Decimal = true;
}
//Sinon, il y a une erreur
else
Erreur = true;
//Si il y a une erreur, nous sortons de la vérification de saisie
if(Erreur == true)
break;
}
//Si il y a une erreur, nous demandons de rentrez un nouveau nombre
if(Erreur == true)
{
cout << "vous n'avez pas rentre un nombre correct" << endl;
cout << "entrez un nombre correct" << endl;
Saisie_Utilisateur(1);
}
}
break;
case 2:
//Nous définissons qu'il y a une erreur pour la première saisie avant vérification
Erreur = true;
//Boucle tant qu'il y a une erreur
while(Erreur == true)
{
//Teste si le caractere est un operateur reconnu if(signe '+' or signe '-' or signe == '*' or signe == '/')
{
//il n'y a pas d'erreur
Erreur = false;
}
//Sinon, il y a une erreur
else
{
Erreur = true;
}
//Si il y a une erreur, nous demandons de rentrez un nouvel operateur
if(Erreur == true)
{
cout << "vous n'avez pas rentre un operanteur correct" << endl;
cout << "entrez un operateur correct" << endl;
Saisie_Utilisateur(2);
}
}
break;
}
}
/**************************************
Fonction main
Fonction principale du programme
**************************************/
int main()
{
/**************************************
Définition et initialisation des variables
**************************************/
// Variable contenant le resultat de l'opération
double resultat = 0.0;
//Variable contenant le signe de l'opération
char signe = '0';
/**************************************
Corps de la fonction
**************************************/
// Fonction permettant de saisir le premier nombre
cout << " Nivek25 Calc 2008 V0.2b" << endl;
cout << "Entrez le premier nombre " << endl;
Saisie_Utilisateur(1);
//Fonction de vérification de la saisie
Verification_Saisie(1);
// Fonction permettant de saisir le signe de l'opération
cout << "Saisissez le signe de l'operation ( + - / * ) " << endl;
Saisie_Utilisateur(2);
//Fonction de verification de la saisie
Verification_Saisie(2);
// Fonction permettant de saisir le second nombre
cout << "Entre le second nombre " << endl;
Saisie_Utilisateur(1);
//Fonction de vérification de la saisie
Verification_Saisie(1);
// Déterminer le signe de l'opération
if (signe == '+')
{
resultat = nombre[0] + nombre[1];
}
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 4 juil. 2008 à 15:58
Hello,
Pourquoi as-tu cliquer sur "Réponse Acceptée"? Tu as la solution à ton problème?
Je ne vois aucune déclaration de variables dans tes fonctions. Il est peut-être là le souci...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
DevilBTB
Messages postés6Date d'inscriptiondimanche 20 avril 2008StatutMembreDernière intervention17 juillet 2008 4 juil. 2008 à 16:49
Nan nan j ai pas la réponse, désolé ^^
Certaines variables sont en globales dans le fichier main.h.
La je remets pour que se soit plus claire ^^
Fichier main.cpp
/**************************************
Programme : Nivek25 Calc 2008
Fichier : main.cpp
Créateur : Nivek25
Mail : nivek25@live.fr
Creation : 3/07/2008
Logiciel : Code::Blocks 8.02
Version : 0.2a
Modification : 4/07/2008
**************************************/
/**************************************
Ce programme fait partie d'un
tutoriel de CPPFrance, pour apprendre
en appliquant les bases du C++
**************************************/
/**************************************
Fichiers à inclure
**************************************/
#include
#include <cstdlib>
#include "main.h"
/**************************************
Utilisation de l'espace de noms standards
**************************************/
using namespace std;
void Saisie_Utilisateur(int Choix)
{
switch (Choix)
{
case 1:
cin >> nombre; <-------------------------------------- no match for 'operator>>' in 'std::cin >> nombre'
break;
case 2:
cin >> signe;
break;
}
}
/**********************************
Fonction Verification_Saisie
Fonction permettant la vérification de la saisie utilisateur
**********************************/
void Verification_Saisie(int Choix)
{
//Fonction permettant un choix pour une verification de la saisie en fonction de l'argument nombre : 1 ou signe : 2
switch (Choix)
{
case 1:
//Nous définissons qu'il y a une erreur pour la première saisie avant vérification
Erreur = true;
//Boucle tant qu'il y a une erreur
while(Erreur == true)
{
//Définissons qu'il n'y a pas de décimal de mise avant la vérification
Decimal = false;
//Teste la saisie caractere apres caractere
for(int i = 0; i < 10; i++)
{
//test si nous rencontrons la fin de la saisie
if(int (nombre[i]) == 0)
{
//Il n'y a pas d'erreur
Erreur = false;
//Fin de verification de saisie
break;
}
//Sinon, on teste si le caractere est un chiffre
else if(int(nombre[i]) > 47 and int(nombre[i]) < 58)
//Il n'y a pas d'erreur
Erreur = false;
//Sinon, on teste si le caractere est un point et s'il n'y en a déja pas un
else if(int(nombre[i]) == 46 and Decimal == false)
{
//Il n'y a pas d'erreur,
Erreur = false;
//Nous ne pourrons plus mettre de point
Decimal = true;
}
//Sinon, il y a une erreur
else
Erreur = true;
//Si il y a une erreur, nous sortons de la vérification de saisie
if(Erreur == true)
break;
}
//Si il y a une erreur, nous demandons de rentrez un nouveau nombre
if(Erreur == true)
{
cout << "vous n'avez pas rentre un nombre correct" << endl;
cout << "entrez un nombre correct" << endl;
Saisie_Utilisateur(1);
}
}
break;
case 2:
//Nous définissons qu'il y a une erreur pour la première saisie avant vérification
Erreur = true;
//Boucle tant qu'il y a une erreur
while(Erreur == true)
{
//Teste si le caractere est un operateur reconnu if(signe '+' or signe '-' or signe == '*' or signe == '/')
{
//il n'y a pas d'erreur
Erreur = false;
}
//Sinon, il y a une erreur
else
{
Erreur = true;
}
//Si il y a une erreur, nous demandons de rentrez un nouvel operateur
if(Erreur == true)
{
cout << "vous n'avez pas rentre un operanteur correct" << endl;
cout << "entrez un operateur correct" << endl;
Saisie_Utilisateur(2);
}
}
break;
}
}
/**************************************
Fonction main
Fonction principale du programme
**************************************/
int main()
{
/**************************************
Définition et initialisation des variables
**************************************/
// Variable contenant le resultat de l'opération
double resultat = 0.0;
//Variable contenant le signe de l'opération
char signe = '0';
/**************************************
Corps de la fonction
**************************************/
// Fonction permettant de saisir le premier nombre
cout << " Nivek25 Calc 2008 V0.2b" << endl;
cout << "Entrez le premier nombre " << endl;
Saisie_Utilisateur(1);
//Fonction de vérification de la saisie
Verification_Saisie(1);
// Fonction permettant de saisir le signe de l'opération
cout << "Saisissez le signe de l'operation ( + - / * ) " << endl;
Saisie_Utilisateur(2);
//Fonction de verification de la saisie
Verification_Saisie(2);
// Fonction permettant de saisir le second nombre
cout << "Entre le second nombre " << endl;
Saisie_Utilisateur(1);
//Fonction de vérification de la saisie
Verification_Saisie(1);
// Déterminer le signe de l'opération
if (signe == '+')
{
resultat = nombre[0] + nombre[1];
}
J ai noté l erreur que je comprend pas en rouge, et ce qui est en gros, c est mon second problème, car la quand je lance le programme, qui s ouvre dans la console, je note mon nombre et sa met :
vous n'avez pas rentre un nombre correct
entrez un nombre correct
Vous avez une piste pour l erreur et mon problème?
Vous n’avez pas trouvé la réponse que vous recherchez ?
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 4 juil. 2008 à 17:21
cin >> nombre;
--> tu ne peux pas mettre un tableau à cette endroit
cin >> nombre[0]; devrait mieux fonctionner
Ensuite, pour le second problème, le code est bizarrement fait...il faut que ton nombre soit compris entre 47 et 58 pour ne pas avoir d'erreurs.
Tu n'aurais pas mixer 2 codes par hasard?
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
DevilBTB
Messages postés6Date d'inscriptiondimanche 20 avril 2008StatutMembreDernière intervention17 juillet 2008 4 juil. 2008 à 17:39
En faite, j ai rien compris a ce niveau du code,alors hier après midi, j y ai passer du temps a comprendre et j ai pas trop compris en faite lool. Alors aujourd'hui je suis venu ici.
Pour cin >> nombre[0]; sa a l aire d être bon, mais je suis pas sure, car au premier passage nombre[0] vaut une certaine valeur pour le premier nombre à saisir.
Et après pour le second nombre, il change encore de valeur pour la nouvelle saisie de l utilisateur. C est pas sa?
J ai essayer le programme et j ai toujours un resultat de 0.
Et oui, il accepte que les nombres entre 47 et 58. je vais voir pour changer sa et je redonnerai le code comme je l ai changer.
Merci de ta réponse, et je pense qu il va falloire que je change tout le code ou au moins la partie verification.
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 4 juil. 2008 à 17:45
Si, si, le code que je t'ai donné affecte la valeur à nombre[0] seulement.
Bon courage pour refondre la partie vérification: en fait, le code est valable si tu récupères la saisie de l'opérateur sous forme de caractères et non de double
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
DevilBTB
Messages postés6Date d'inscriptiondimanche 20 avril 2008StatutMembreDernière intervention17 juillet 2008 4 juil. 2008 à 17:52
A donc il faut l instruction atof? Ou bien nan c est l inverse je crois.
Enfin je vais faire des recherches et je reviendrai vous dire si c est bon ^^.