Salut, j´ai décidé de me remettre au C++ que j´ai commencé il y a maintenant environ... on va dire plus d´un an, et donc voilà je reprends tout à zéro ( c´est en traînant depuis quelques temps sur ce forum que l´idée de m´y remettre est venue... bref faut pas chercher à comprendre).
Je commence petit avec un convertisseur euro < -> Francs qui tourne en dos ( je n´ai pas encore appris à manipuler les applis à interface graphique...). Donc pour faire dans l´original, je veux mettre au lancement une fonction qui demande un pass ( genre serial tout simple) qui soit caché par des astérisques ( ça se dit bien comme ça ? ) pendant que l´utilisateur tape.
Ensuite je sais que l´on peut modifier la couleur de fond ( tout noir c´est pas très esthétique) mais aucune idée quand au code à insérer concernant ceci.
Maintenant je pense m´y mettre sérieusement, surtout avec les tutos de JeanYY et El-Hefe, qui donnent envie d´approfondir ![]()
Bonne chance. C´est plaisant de voir quelqu´un de réaliste.
Quel abrutit ! J´ai oublié de poser mes 2 questions !
Voilou :
- comment justement rendre cet effet de cryptage ? Il suffit juste de remplacer les lettres tappées par des * ?
- comment changer la couleur de fond ?
En attendant je poste le code que j´ai terminé ( je m´entraîne en même temps à l´anglais comme c´est la langue qu´utilise la plupart des sites sur la prog, donc ne vous inquiétez pas, c´est bien de moi ^^). En fait j´attends juste quelques remarques sur la mise en forme et la pertinance des placements des commentaires... voyez ( par contre je ne sais pas si le code ce sera pas déformé à cause de la page HTML. Au cas où copiez-le dans le Bloc-notes.
int main()
{
double start, a, b, ok;
cout < < " ========== > J-SL1 ~ bEsT C0d3r < =============\n" ;
cout < < " ============= [just utopian] ===============\n" ;
cout < <
"===============================================\n
\n" ;
cout < < " Welcome into my useless Euro<->Francs converter\n" ;
cout < < " Choose the conversion type you want to execute :\n" ;
cout < < " - Hit 1 to convert Francs -> Euros\n" ;
cout < < " - Hit 2 to convert Euros -> Francs\n" ;
cout < < " - If you don´t care about these 2 options,\n";
cout < < " hit 3 to exit." < < ´\n´ < < ´\n´ ;
cin > > start; // defines ok = 1 if txt entered = 1, 2 or 3
if ( start == 1) {ok = 1;} // avoids errors and permits to verify
if ( start == 2) {ok = 1;} // that the person has entered one of
if ( start == 3) {ok = 1;} // the 3 choices
while ( ok ! = 1) // boucle that continues as ong as ok is not equal to 1
{
cout < < ´\a´ ; // 1 bip
cout < <
"=================================================
======\n" ;
cout < < " Error : I only asked you to seize the numbers 1, 2 or 3\n" ;
cout < < " Here are the instructions to follow :\n" ;
cout < < " - Hit 1 to convert Francs to Euros\n" ;
cout < < " - Hit 2 to convert Euros to Francs\n" ;
cout < < " - Hit 3 to exit the program\n\n" ;
cin > > start;
if ( start == 1) {ok = 1;}
if ( start == 2) {ok = 1;}
if ( start == 3) {ok = 1;}
}
if ( start == 1)
{
cout < < " ============================\n\n" ;
cout < < " Enter your value in Francs : " ;
cin > > a;
b = a / 6.55957 ;
cout < < a < < " Franc(s) = " < < b < < " Euro(s)" < < endl < < endl ;
cout < < " Press enter to continue...";
a = getchar() ;
return 0;
}
if ( start == 2)
{
cout < < " ============================" < < endl < < endl ;
cout < < " Enter your value in Euros : " ;
cin > > a;
b = a * 6.55957 ;
cout < < a < < " Euro(s) = " < < b < < " Franc(s)" < < endl < < endl ;
cout < < " Press enter to continue...";
a = getchar();
return 0;
}
if ( start == 3) {return 0;}
return 0;
}
Je profite de ma lancée pour demander un truc au sujet de iostream : j´ai entendu que pour que ce soit du C++ pur, il na faut pas écrire le . h mais est-ce que ça marche pour les autres libs ?
ben pour les codes cryptés, tu ne peux pas te servir de cin.
Il faut que tu fasses une fonction similaire ![]()
Je te laisse voir ce petit programme que je viens de faire pour toi !
Dis moi si ça ne fait pas ce que tu veux !
using namespace std; // pour iostream
int getnombre()
{
int c;
int n=0;
do
{
c=getch(); // attends la prochaine touche
if ( c>=´0´ && c<=´9´) / / si c´est un chiffre uniquement
{
n*=10;
n+=(c-´0´); // mise a jour de n
cout < < " *";
cout.flush(); // affiche une * et flush
}
}
while(c!=13); // jusqu´a entrée ( code 13)
cout < < endl; // revient a la ligne
return n;
}
int main()
{
int a;
a=getnombre();
cout < < " nombre = " < < a < < endl;
return 0;
}
Tiens, du coup, j´ai rajouté le code que je viens de te filer dans mon tutorial, avec des explication en + !
Si tu veux le voir : vas voir l´annexe B.2. de mon tutorial :
http://fvirtman.tripod.com/info/tuto/index.html
main site :
http://www.fvirtman.fr.st
Ahhh merci ! !! Un code rien que pour moi dit ! Oui c´est effectivement ça que je voulais ![]()
Je dois te dire aussi, puisque tu l´as rajouté dans ton tutorial, que quand j´ai compilé ( Dev-C++ 4.9.8.5) il y a eu des erreurs au niveau des apostrophes que tu as mises ligne 14 ( autour du 0 et du 9) et ligne 17 autour du 0.
Je ne sais pas si cela vient du copier/coller : il y avait d´autres erreurs qui signalaient les guillemets du cout trop éloignées ou je sais pas... en tout cas dès que je les ai rapprochés ça allait. Mais je pensais qu´il n´y avait pas de contrainte au niveau de l´espacement des caractères ?
Bref pour compiler ton prog j´ai remplacé les ´0´ et ´9´ par des " 0" et " 9" et les < < par des < <
Ah ben mince, ça doit effectivement venir du copier de la page puisque mes guillemets apparaissent séparés...
Je viens d´aller voir sur ton tuto comment tu as mis ça, c´est encore une fois TRES bien commenté !
Quand je copie le code à partir de ton site ça compile nikel ( pour les autres, vous avez ce qu´il vous reste à faire)
En ce qui concerne la conversion euro ou francs, quand on tape une opération à convertir genre 1/5 on voit que le prog affiche très vite le résultat ( pas le temps de le voir lol) et quitte direct.
Sinon je voulais aussi demander : je pourrais faire des jeux 2d quand je serai à peu près à quel stade ? Je veut dire par rapport à mon niveau actuel ( pas folichon). Ca me tarde de commencer un pong ou tetris ! C´est mon but actuel en ce qui concerne le développement de jeux
Bon assez posé de questions je pense, il est temps de retourner dans ce bouquin ( ça donne une bonne raison pour lire c´est déjà ça...)
Oups désolé j´ai pas terminé
je vois que là tu as inclu stdio alors que dans ton code posté sur ton site tu ne l´as pas inclue ( il ne sert donc à rien ? pourtant le log de compil ne m´indique pas qu´elle n´est pas utilisée)
Pour en revenir aux conversions à partir d´opérations, comment je fais pour ne pas que ça quitte ? ( J´ai essayé avec d´autres progs du même genre et ils quittent aussi)
Pour changer le fond de la console.
Je ne sais pas si on peut faire ca simplement.
Le principe de la methode que je te donne c´est de remplir la console avec un text de fond qui est d´une certaine couleur, puis de remettre le curseur en haut.
( faut include < windows.h>)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HA
NDLE), 0x47);
string str;
str.append(80*25,´ ´);
cout<<str;
COORD c;
c.X=0;
c.Y=0;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_H
ANDLE),c);
pour choisir la couleur c´est pas tres complique
ici j´ai mis 0x47
En fait l´octet de droite c´est la couleur du texte et celui de gauche c´est la couleur du fond.
je connais pas tous les codes couleurs.
7 c´est blanc, 4 c´est rouge, 1 c´est bleu...etc
les valeurs vont de 1 a F ( en hexa)
soit tu essayes les combinaisons soit tu cherches sur le net.
Ensuite si ton mot de passe c´est tout une chaine je te propose une petite amelioration
string getchaine()
{
char c = 0;
string s;
while(1)
{
c=getch();
if ( c!=13)
{
s.append(1,c);
cout < < " *";
cout.flush(); }
else break;
}
return s;
}
et dans ton main tu fais
string pass;
pass=getpass();
cout<<pass<<endl;
( faudra faire #include < string>)
Une derniere remarque, dans ton code tu declares start comme un double et tu teste s´il vaut 1,2,3
Il ne faut pas faire ca, declare le comme un int.
Les tests d´egalites sur les doubles ou les floats ne marchent pas toujours.
si tu ne veux pas que ca quitte tu fais un do/while
do
{
cout<<"here are the instruction"
( la suite)
}
while(start!=3)
tu enleves les return 0 dans tes if ( start==X)
et tu ne mets pas la ligne if ( start==3)
Normalement ca devrait marcher
J´ai p-e mal compris ce que tu voulais dire en disant que ton programme quittait. Si c´est pcq tu n´a pas le tps de lire, faut ajouter un
getchar() mais comme dans ton exemple tu les avais mis c´est bizarre ![]()
Alors pour le copier/coller de jeuxvideo.com, c´est normal
ça fait des trucs pas bien ! fie toi a mon site, et mon tuto
pour ce qui est de stdio.h, je l´avais mis lors de mes tests, car je faisais un printf ( équivalent de cout en C pure) que j´ai remplacé par un cout.
Pour que le programme ne quitte pas, il y a soit la méthode C : donc getchar comme te dit I´m the law, soit la méthode C++, pour rester avec iostream : son équivalent :
cin.get();
j´ai mis a jour mon tutorial, si tu veux voir ou je l´ai placé !
j´ai aussi expliqué mieux le cout.flush();
Pour ce qui est de mettre de la couleur sous la console, I´m the law te propose de reparamétrer la console. Si tu veux juste la colorer tu dois avoir des fonctions avec conio.h : cela dit, conio est tres limité...
Pour passer en mode graphique, pas de soucis, tu verras que ce n´est pas tres dur ![]()
Regarde donc mon début de tutorial sur SDL : SDL est un moteur 2D simple d´utilisation, encor emis a jour actuellement, enrichi en permanence, et qui offre déja des trucs sympas !
de plus, il offre la possibilité d´amorcer OpenGL : la 3D donc tout bénef
Tu verras que la programmation graphique n´est pas bien différente de la programmation texte, tu as juste des fonctions d´affichage en +
Contacte _[Conquer]_ sur ce forum si tu veux : il vient de se mettre a SDL, et je dois ma foi dire qu´il avance bien
Il est motivé ! ça fait plaisir a voir
A l´occas, je continuerai mon tuto sur SDL...
i_am_the_law > en fait ça ne quitte que quand je fais des conversions à partir d´opérations : si j´entre par ex 62.359874356978 etc... ça me donnera le bon résultat, alors que si j´entre 6*5 ou toute autre opération, ça quitte... j´avais aussi pensé au getchat() [maintenant ce sera cin.get
] mais c´est juste le fait qu´il y ait une opération qu´il quitte
Sinon est-ce qu´il n´est pas préférable d´utiliser float à la place de double pour les variables ? ( ça marche avec les 2 quand on tape des nombres à virgule).
Tu ne peux pas rentrer d´opérations comme 6*5 c´est normal. Si tu veux faire ça c´est bcp trop compliqué. Il faut lire tout une chaine de caractère et ensuite l´analyser pour trouver les nombres et les *-+/
ah ben oui, les opérations ne sont pas a rentrer avec un cin pour les nombres !
de toute façon, cin et scanf sont pleines de failles : tu les fais planter facilement.
mettre les opérations, c´est dur !
un double est bien mieux qu´un float au niveau précision ( il est stocké sur 8 octets au lieu de 4), cela dit, pour manipuler les euros, as tu besoin d´une grande précision ?
Si tu veux gérer la virgule, modifie la fonctoin getnombre ![]()
koyo-k : pour faire des opération d´une manière pas compliquée, c´est simple, au menu tu demande si il veut faire:
1) conversion euro/francs
2) conversion francs/euro
3) multiplication + conversion ( on demande les 2/3/4/5.. nombres qui seront utiliser pour faire le calcul et apres on converse le nombre obtenu).
4) . ..
mais bon c´est pas tout à fait ce que tu veux
.
jyy :
" Contacte _[Conquer]_ sur ce forum si tu veux : il vient de se mettre a SDL, et je dois ma foi dire qu´il avance bien Il est motivé ! ça fait plaisir a voir"
je te remercie, mais sans toi ( qui, je dois le préciser, a bien passé au moins 6 heures à m´expliquer la SDL en moins de 2 jours(le pauvre
) )j´aurais jamais rien compris^^.
donc big merci à toi :p.
sinon c´est vrai koyo-k, je peux t´aider quand tu veux ( enfin je peux t´aider dans ce que je sais faire^^)^^.
Il est possible de gerer les operations pour faire une vraie calculatrice, mais pour cela tu dois ecrire une grammaire et ensuite la verifier. Mais cela sort surement du cadre de ton programme ![]()