Par la malpeste !
Certes le C++ n´es qu´orienté objet et fait un peu figure de language batard ( selon les termes du red book d´OpenGL alors
) .
Mais pourquoi le hais tu ?
j´aime pas l´object oriented, je trouve que c´est inutile d´apprendre ça, mais j´ai pas vu toute la " ""puissance""" du cpp c´est p´tet pour ça, et puis ça me répugne à en faire, le C au moins c´est clair, tu piges tout, le Cpp c´est moche...
Enfin j´en ai fait un peu et ça me donne pas envie d´en refaire !
Le problème du C++, c´est que c´est un mode de conception et d´élaboration de programme très différente de la programmation procédurale du C.
Moi aussi a début je me disais " pourquoi s´encombrer d´objets quand les fonctions suffisent ? "
Cependant, une fois la vision orientée objets acquise, on se rend compte de sa vraie puissance.
Pour l´élaboration de bibliothèques et de librairies, le C++ est aje trouve un excellent langage.
Euh bon c´est pas tout ça mais j´ai encore une question ( et oui on en fini pas...)
Voila j´ai crée un petit convertisseur euro/francs , francs/euros rapidement avec un menu avec une option pour choisir si on veut convertir des euros en francs et une autre option si on veut convertir des francs en euros.
C´est du style " Votre choix : " et on tape 1 ou 2, si on ne tape ni 1 ni 2 mais autre chose, le programme génére une erreur et quitte.
Mais j´aimerai bien aussi que le programme génére une erreur lorsque qu´on rentre des caractères du clavier ( style " jefaisunbug") à la valeur à convertir.
" Valeur à convertir : "
Si on rentre des caractère le programme remplace les caractère par des chiffres et convertis n´importe quoi donc...
Le problème c´est que mon programme ne sais pas faire la différence entre une chaîne de caractères et des nombres. Comment inclure cette différence dans le programme ?
Merci.
help me ![]()
si tu utlise quelque chose comme :
cin > > Prix;
et que prix est un long ou un int, il plante quand tu lui rentre quelque chose qui n´et pas un chiffre ( en tout cas avec mon compilo). alors je ne comprend pas ton problème.
sinon, tu peut récuperer un *char
et dans ce cas là tu peut faire quelque chose comme :
for ( int I=0;Nombre[I]!=0;++i)
if ( !((Nombre[I]>47)&&(Nombre[I]<58))) goto ERREUR;
et là il plante le programme si tu rentre autre chose qu´une suite de nombre.
Il y a certainement une fonction prédéfinie qui te fait ça, mais bon, comme ça tu comprend ce qui se passe ( attention, tu n´a pas pour autant le nombre en question).
Mais pour que l´on puisse répondre correctement à tes questions, il faut que tu donne plus de rpécision sur tes problèmes.
PAS DE GOTO ! JAMAIS !
Bon pour répondre à la question :
La meilleure solution si tu veux être sûr que le nombre donné ne contient pas de lettres, c´est de procéder ainsi :
char buff[16];
16 est beaucoup trop grand : si tu veux stocker ton nombre dans un int par la suite, remplace ce nombre par le nombre maximal de chiffres stockable dans un int : exemple, si un int pèse 2 octets, tu peux aller de 32767 à -32768, soit 5 chiffres.
Ensuite tu fais :
cin > > buff;
Pour obtenir une chaine de caractère.
Il faut maintenant vérifier que cette chaine ne comporte pas de chiffres, pour cela crée un fonction :
bool checkIfValid( char *table )
{
for( ; *table ! = ´\0´ && *table > = ´0´ && *table < = ´9´ ; table++ ) ;
if( *table == ´\0´ )
return true;
else
return false;
}
Tu lui passe buff en paramètre et tu récupère la valeur renvoyé pour savoir si la chaine est valide ou non :
if( checkIfValid( buff ) )
; / / La chaine est valide
else
; / / La chaine est invalide
Enfine, il ne te reste plus qu´à convertir ta chaine en int à l´aide d´une fonction prévue à cet effet :
int convertStringToInt( char *table )
{
int value = 0;
for( ; *table ! = ´\0´ ; table++ )
{
value *= 10;
value += *table - ´0´;
}
return value;
}
Et voila. J´ai pas eu le temps de tester, mais ensuite il suffit de faire appel à cette fonction pour récupérer la valeur :
int somme = convertStringToInt( buff ) ;
Ca doit marcher normalement ![]()
J´ai pas de trop compris les 2 lignes que tu as écrites au-dessus
Sinon pour aider un peu je vais poster mon programme ça ira plus vite :
using std::cout;
using std::cin;
using std::endl;
float conv_eurotofrancs(float euros);
float conv_francstoeuros(float francs);
int main()
{
float euros;
float francs;
unsigned short int choix;
cout < < " ******MENU******";
cout < < " \n1) Euros => Francs";
cout < < " \n2) Francs => Euros";
cout < < " \n\nVotre choix : " ;
cin > > choix;
if ( choix == 1)
{
cout < < " \n\nValeur en euros a convertir en francs : " ;
cin > > euros;
cout < < endl;
francs = conv_eurotofrancs(euros);
cout < < euros < < " euros font " < < francs < < " francs.\n\n";
}
if ( choix == 2)
{
cout < < " \n\nValeur en francs a convertir en euros : " ;
cin > > francs;
cout < < endl;
euros = conv_francstoeuros(francs);
cout < < francs < < " francs font " < < euros < < " euros.\n\n";
}
if ( (choix ! = 1) && ( choix ! = 2 ) )
cout < < " \n\nErreur : veuillez recommencer en choisissant 1 ou 2 ! \n\n";
system("pause");
return 0;
}
float conv_eurotofrancs(float euros)
{
return ( euros*6.55957);
}
float conv_francstoeuros(float francs)
{
return ( francs/6.55957);
}
Voila si on rentre une autre valeur que des nombres, le programme continuera à faire les calcul avec un suite de caractère.
Exemple :
Je choisi de convertir des euros en francs.
" Entrer la valeur à convertir :"
La je tape " seb".
Et le programme me met en résultat : -1.07374e+008 euros font -7.04328e+008 francs.
Et voila cette erreur me gène un peu et je sais pas comment la detecter. ![]()
Merci lag-it, rola c´est un peu complqiué pour mon niveau de c++, enfin je peux toujours essayer
Et pour les float ça marche aussi ?
Pourtant mon code fonctionne pour détecter ce type d´erreur.
Mais le concept est peut être un peut trop avancé si tu débutes. Patience ![]()
Désolé je croyais que le dernier message etait pour moi, jai rien dit.
Pour les floats il faut modifier les fonctions de test de validité et de conversion afin de les supporter bien sûr ( pareil si tu veux des nombres négatifs ) .
Mon exemple ne marche qu´avec des unsigned int ![]()
Il n´y pas une fonction en C++ deja toute faite qui detecte ces erreurs ?
Car franchement je pige pas ta fonction je suis désolé
![]()
Pas à ma connaissance.
Il faut que tu en apprenne plus sur les chaines de caractères, les pointeurs avant de comprendre ce que j´ai écrit.
Aussi anodin qu´il peut paraitre, le problème n´est pas si simple à résoudre ![]()
Justement je bloque un peu sur les pointeurs, mais avant il faut que je revois les classes et tous ça car j´ai un peu oublié. Je suis en train de continuer le C++ car j´avais arreter il y a quelques mois c´est pour ça.
Bon bin je reviendrais sur tous ces trucs la en temps voulu. ![]()
salut je suis tout nouveau ds le monde de la prog et j´essaye d´apprendre le C++ mais pr l´apprendre, est ce qu´il faut d´abord passer par le C ? est ce que vous auriez des liens pour des super tutorials à me filer ?
merci d´avance !
:recherhcer: ![]()
http://www.developpez.com
Il n´est pas obligatoire d´apprendre le C avant car la plupart des tutos de C++ l´enseignent à leur commencement.
ok merci du renseignement, sinon au bout de combien de tps on peut maitriser les bases ?
est ce qu´il faut avoir un super niveau en maths ( on m´a dit ca ) ?
il faut être bon en math, mais pas besoin d´un super niveau ( sauf lorsque tu te mettra à faire de la 3D).
tu peut maitriser les bases en 3 jours si tu le veux, mais pour maitriser le langage, ça sera plutot 3 ans.
( c´est un peu satanique ( ou chrétiens, je sais pas) mon post avec cette trinité de chiffre 3...)
Si tu ne compte pas faire de 3d ( ou d´applications 2d à caractères mathématiques ) un niveau de math de collège est suffisant.
Pour l´acquisition et la maitrise des bases, cela dépends de toi ( capacité d´assimilation, voir les choses en terme de programmation, . .. ) .
Si tu bosses bien, cet été devrait y suffire ![]()