Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2608 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Petit Problème

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petit Problème

n°2291599
ryngetsu
Only skylake and AMD GPU
Posté le 11-11-2016 à 14:07:31  profilanswer
 

Bonjour à tous. Récemment je me suis mis à approfondir mes aptitudes en C++ et je commence par une Pierre Feuille Ciseau en texte dans la console mais j'ai un petit souci:
 
Le code est le suivant:
 

Spoiler :

#include <iostream>
#include <stdlib.h>
using namespace std;
 
int main(){
    int a=0;
    int b=0;
    int c=0;
    int e=0;
    int f=0;
    int j=0;
    int i;
    string sign;
    cout << "Bienvenu.";
    Jeu:{
        cout << "Choisis ton signe: nn";
        cout << "  Pierre n";
        cout << "  Feuille n";
        cout << "  Ciseaux nn";
        cout << "n Quel est ton signe? ";
        cin >> sign;
        for(i=0; i<4; i++){
                cout << "nnnnnnnnnnnn";
        }
        if sign = "Pierre"{
            a=1;
            }
        if sign = "Feuille"{
            a=2;
            }
        if sign = "Ciseaux"{
            a=3;
            }
        b = rand() % 3 + 1;
 
}    return 0;
}


 
Le soucis est que je n'arrive pas à nettoyer l'écran (j'évite d'utiliser les commandes system)  et que j'ai le message "error: expected '(' before 'sign'" dans les trois lignes du if.
 
J'ai essayé en ajoutant/enlevant accolades ou parenthèses mais rien ne résolu le problème. Merci beaucoup.


---------------
Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide. – Albert Einstein
mood
Publicité
Posté le 11-11-2016 à 14:07:31  profilanswer
 

n°2291605
theshockwa​ve
I work at a firm named Koslow
Posté le 11-11-2016 à 17:26:36  profilanswer
 

= est un opérateur d'affectation. Dans tes if, tu voulais utiliser == qui est l'opérateur de comparaison
 

Code :
  1. if (sign == "Pierre" )
  2. {
  3. // ...
  4. }


---------------
last.fm
n°2291606
ryngetsu
Only skylake and AMD GPU
Posté le 11-11-2016 à 18:04:29  profilanswer
 

theshockwave a écrit :

= est un opérateur d'affectation. Dans tes if, tu voulais utiliser == qui est l'opérateur de comparaison

 



Code :
  1. if (sign == "Pierre";)
  2. {
  3. // ...
  4. }


Ah d'accord l'erreur de débutant :(

 

Merci beaucoup :)

 

J'avais oublié les parenthèses aussi


Message édité par ryngetsu le 11-11-2016 à 18:21:55

---------------
Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide. – Albert Einstein
n°2291607
ryngetsu
Only skylake and AMD GPU
Posté le 11-11-2016 à 18:27:22  profilanswer
 

Grâce à toi j'ai avancé mais j'ai un autre soucis, bien qu'il soit mineur cette fois:

 
Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4. int main(){
  5.     int a=0;
  6.     int b=0;
  7.     int c=0;
  8.     int e=0;
  9.     int f=0;
  10.     int j=0;
  11.     int i;
  12.     string sign;
  13.     cout << "Bienvenu.";
  14.     Jeu:{
  15.         cout << "Choisis ton signe: \n\n";
  16.         cout << "  Pierre \n";
  17.         cout << "  Feuille \n";
  18.         cout << "  Ciseaux \n\n";
  19.         cout << "\n Quel est ton signe? ";
  20.         cin >> sign;
  21.         for(i=0; i<12; i++){
  22.                 cout << "\n\n\n";
  23.         }
  24.         if (sign == "Pierre" ){
  25.             a=1;
  26.             }
  27.         if (sign == "Feuille" ){
  28.             a=2;
  29.             }
  30.         if (sign == "Ciseaux" ){
  31.             a=3;
  32.             }
  33.         b = rand() % 3 + 1;
  34.         cout << "Vous avez joué: ";
  35.         if (a == 1){
  36.             cout << "Pierre.";
  37.         }
  38.         if (a == 2){
  39.             cout << "Feuille";
  40.         }
  41.         if (a == 3){
  42.             cout << "Ciseaux";
  43.         }
  44. }    return 0;
  45. }
 

Au lieu de "Vous avez joué: " la console m'affiche "Vous avez jouÚ: ". merci encore :)

Message cité 1 fois
Message édité par ryngetsu le 11-11-2016 à 18:28:26

---------------
Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide. – Albert Einstein
n°2291608
theshockwa​ve
I work at a firm named Koslow
Posté le 11-11-2016 à 19:14:14  profilanswer
 

C'est un problème d'encodage. La table de caractères de ton éditeur de texte n'est pas la même que la table de caractères utilisée par ta console.

 

Si tu te restreins aux seuls caractères de la table ASCII, tu éviteras ce genre de souci (mais tu n'auras pas droit aux accents)


Message édité par theshockwave le 11-11-2016 à 19:14:37

---------------
last.fm
n°2291609
ryngetsu
Only skylake and AMD GPU
Posté le 11-11-2016 à 20:12:56  profilanswer
 

Le fait qu'il m'affiche un Ú veut surement dire qu'il y a aussi un caractère qui sera remplacé par é une fois compilé. Comment je trouve ce caractère?


---------------
Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide. – Albert Einstein
n°2291615
ryngetsu
Only skylake and AMD GPU
Posté le 11-11-2016 à 22:42:39  profilanswer
 

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4. int main(){
  5.     int a=0;
  6.     int b=0;
  7.     string finir;
  8.     int e=0;
  9.     int f=0;
  10.     int j=0;
  11.     int i;
  12.     string sign;
  13.     cout << "Bienvenu.";
  14.     Jeu:{
  15.         cout << "Choisis ton signe: \n\n";
  16.         cout << "  Pierre \n";
  17.         cout << "  Feuille \n";
  18.         cout << "  Ciseaux \n\n";
  19.         cout << "\n Quel est ton signe? ";
  20.         cin >> sign;
  21.         for(i=0; i<12; i++){
  22.                 cout << "\n\n\n";
  23.         }
  24.         if (sign == "Pierre" ){
  25.             a=1;
  26.             }
  27.         if (sign == "Feuille" ){
  28.             a=2;
  29.             }
  30.         if (sign == "Ciseaux" ){
  31.             a=3;
  32.             }
  33.         b = rand() % 3 + 1;
  34.         cout << "Vous avez joué: \n";
  35.         if (a == 1){
  36.             cout << "Pierre.\n";
  37.         }
  38.         if (a == 2){
  39.             cout << "Feuille.\n";
  40.         }
  41.         if (a == 3){
  42.             cout << "Ciseaux.\n";
  43.         }
  44.         cout << "Votre adversaire a joué: \n";
  45.         if (b == 1){
  46.             cout << "Pierre.\n\n";
  47.         }
  48.         if (b == 2){
  49.             cout << "Feuille.\n\n";
  50.         }
  51.         if (b == 3){
  52.             cout << "Ciseaux.\n\n";
  53.         }
  54.         if (a == b){
  55.             j = 0;
  56.             cout << "Match Nul.\n";
  57.         }
  58.         if (a == 1 & b == 2){
  59.             f = f+1;
  60.             j = j+1;
  61.             cout << "Vous avez perdu.\n";
  62.         }
  63.         if (a == 1 & b == 3){
  64.             e = e+1;
  65.             j = 0;
  66.             cout << "Vous avez gagné.\n";
  67.         }
  68.         if (a ==2 & b == 1){
  69.             e = e+1;
  70.             j = 0;
  71.             cout << "Vous avez gagné.\n";
  72.         }
  73.         if (a == 2 & b == 3){
  74.             f = f+1;
  75.             j = j+1;
  76.             cout << "Vous avez perdu.\n";
  77.         }
  78.         if (a == 3 & b == 1){
  79.             f = f+1;
  80.             j = j+1;
  81.             cout << "Vous avez perdu.\n";
  82.         }
  83.         if (a == 3 & b == 2){
  84.             e = e+1;
  85.             j = 0;
  86.             cout << "Vous avez gagné.\n";
  87.         }
  88.         if (j >= 3){
  89.             cout << "T'es à chier.\n";
  90.         }
  91.         cout << "\n Nombre de victoires: ";
  92.         cout << e;
  93.         cout << "\n Nombre de défaites: ";
  94.         cout << f;
  95.         cout << "\n\n Voulez-vous rejouer? ";
  96.         cin >> finir;
  97.         if (finir == "Oui" ){
  98.             cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
  99.             goto Jeu;
  100.         }
  101.         else{
  102.             return 0;
  103.         }
  104. }
  105. }


 
Je laisse ça là si quelqu'un veut l'essayer ou changer quelque chose.
 
Je me demande bien comment je pourrais optimiser ce code...


---------------
Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide. – Albert Einstein
n°2291617
theshockwa​ve
I work at a firm named Koslow
Posté le 12-11-2016 à 01:04:37  profilanswer
 

ryngetsu a écrit :

Le fait qu'il m'affiche un Ú veut surement dire qu'il y a aussi un caractère qui sera remplacé par é une fois compilé. Comment je trouve ce caractère?


Le problème, c'est que tu n'as pas de garantie sur la table de caractères utilisée par la personne qui exécutera ton programme.
Donc oui, tu peux trouver quel caractères te donnera un "é" dans ton cas, mais ce ne sera pas standard et pas portable, d'où ma recommandation d'éviter ces caractères, pour t'assurer que tes messages seront lisibles par tous.


---------------
last.fm
n°2291618
theshockwa​ve
I work at a firm named Koslow
Posté le 12-11-2016 à 01:09:08  profilanswer
 

ryngetsu a écrit :

Je me demande bien comment je pourrais optimiser ce code...


 
Très honnêtement, pour un programme de ce genre, il n'y a aucune raison de se demander comment l'optimiser : ton processeur va se tourner les pouces en permanence en attendant les entrées de ton utilisateur.
Par contre, en terme de maintenabilité, tu as quelques options qui se présentent à toi.
 
Commence par identifier les blocs de logique et les mettre sous forme de fonction, par exemple, plutôt que d'avoir l'intégralité de ton programme directement dans ta fonction main.
Ton "goto Jeu" est quelque chose que n'importe quel programmeur professionnel te dira immédiatement de retirer. Tu peux sans doute exprimer ta boucle de jeu de manière plus élégante.
 
Une suggestion : essaye de décrire dans une manière un peu abstraite le déroulement d'une partie, ca devrait te guider sur la construction de ton code.


---------------
last.fm
n°2291620
rat de com​bat
attention rongeur méchant!
Posté le 12-11-2016 à 02:01:03  profilanswer
 

theshockwave a écrit :


Le problème, c'est que tu n'as pas de garantie sur la table de caractères utilisée par la personne qui exécutera ton programme.
Donc oui, tu peux trouver quel caractères te donnera un "é" dans ton cas, mais ce ne sera pas standard et pas portable, d'où ma recommandation d'éviter ces caractères, pour t'assurer que tes messages seront lisibles par tous.

Sauf que des textes français sans accents c'est pas beau. :(  
Perso j'utilise la méthode de mettre le bon code en écriture héxa. Le problème c'est que le compilateur va râler car parfois il ne voit pas où se termine le code héxa, genre "méchant" --> "m\x82chant" avec c qui est une valeur héxa valide. Ma solution c'est de rajouter des guillemets "m""\x82""chant", le processeur va réunir les chaînes de caractères au moment de la compilation. C'est du bricolage (et je n'ai testé qu'en C, pas C++) qui risque de ne pas fonctionner selon les encodages utilisés mais à l'époque ça avait réglé mon problème.
 
è ""\x8A""
é ""\x82""
â ""\x83""
ä ""\x84""
à ""\x85""
ç ""\x87""
ù ""\x97""
ê ""\x88""
 
C'est le codepage 437 je crois (-->Wikipédia).
 
Après il doit y avoir un moyen de modifier l'encodage de la console avec les fonctions du système d'exploitation voire avec la bibliothèque standard peut-être.

mood
Publicité
Posté le 12-11-2016 à 02:01:03  profilanswer
 

n°2291626
ryngetsu
Only skylake and AMD GPU
Posté le 12-11-2016 à 08:43:21  profilanswer
 

theshockwave a écrit :


 
Très honnêtement, pour un programme de ce genre, il n'y a aucune raison de se demander comment l'optimiser : ton processeur va se tourner les pouces en permanence en attendant les entrées de ton utilisateur.
Par contre, en terme de maintenabilité, tu as quelques options qui se présentent à toi.
 
Commence par identifier les blocs de logique et les mettre sous forme de fonction, par exemple, plutôt que d'avoir l'intégralité de ton programme directement dans ta fonction main.
Ton "goto Jeu" est quelque chose que n'importe quel programmeur professionnel te dira immédiatement de retirer. Tu peux sans doute exprimer ta boucle de jeu de manière plus élégante.
 
Une suggestion : essaye de décrire dans une manière un peu abstraite le déroulement d'une partie, ca devrait te guider sur la construction de ton code.


Merci les gars je commence à comprendre. Je vais essayer de faire ça en héxadécimal.
 
Pour l'optimisation, c'est pas une question de CPU même si ça le sera dans des programmes plus avancés, c'est plutôt une question d'apprendre à faire un code plus rapide et surtout plus lisible et moins lourd.
 
J'avais vu que le Goto est une mauvaise chose mais je savais pas comment l'éviter et je suis en train de chercher un moyen d'avoir les scores affichés en permanence.


---------------
Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide. – Albert Einstein
n°2291655
ryngetsu
Only skylake and AMD GPU
Posté le 12-11-2016 à 15:14:27  profilanswer
 

rat de combat a écrit :

Sauf que des textes français sans accents c'est pas beau. :(  
Perso j'utilise la méthode de mettre le bon code en écriture héxa. Le problème c'est que le compilateur va râler car parfois il ne voit pas où se termine le code héxa, genre "méchant" --> "mx82chant" avec c qui est une valeur héxa valide. Ma solution c'est de rajouter des guillemets "m""x82""chant", le processeur va réunir les chaînes de caractères au moment de la compilation. C'est du bricolage (et je n'ai testé qu'en C, pas C++) qui risque de ne pas fonctionner selon les encodages utilisés mais à l'époque ça avait réglé mon problème.
 
è ""x8A""
é ""x82""
â ""x83""
ä ""x84""
à ""x85""
ç ""x87""
ù ""x97""
ê ""x88""
 
C'est le codepage 437 je crois (-->Wikipédia).
 
Après il doit y avoir un moyen de modifier l'encodage de la console avec les fonctions du système d'exploitation voire avec la bibliothèque standard peut-être.


J'ai essayé et ça a marché en C++. Merci bien.


---------------
Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide. – Albert Einstein
n°2291779
user89
Posté le 14-11-2016 à 17:12:48  profilanswer
 

ryngetsu a écrit :


Au lieu de "Vous avez joué: " la console m'affiche "Vous avez jouÚ: ". merci encore :)


Plutôt que des macros objectivement assez dégueux, regarde plutôt du côté des locales.
 

Code :
  1. // NB: ce fichier est au format UTF-8
  2. # include <iostream>
  3. # include <clocale>
  4. int main()
  5. {
  6.   std::setlocale(LC_ALL, "" );
  7.   std::cout << "Été\n";
  8.   return 0;
  9. }


Le plus portable est d'encoder son fichier source en utf8, comme indiqué en commentaire. N'importe quel éditeur moderne propose cette option. Malheureusement, un commentaire est ce qu'on peut faire de mieux en C++ à l'heure actuelle. A ma connaissance, le standard ne propose pas grand chose concernant l'encodage des fichiers sources.

n°2291787
ryngetsu
Only skylake and AMD GPU
Posté le 14-11-2016 à 18:13:03  profilanswer
 

Ohla j'en suis qu'au début ^^
 
Je connais ni clocale ni setlocale et j'ai encore moins de connaissainces par rapport à l'encodage UTF 8


---------------
Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu’il est stupide. – Albert Einstein
n°2292983
rema3
Posté le 30-11-2016 à 11:43:40  profilanswer
 

In this code, the syntax of all the if statements are wrong.
You didn't put brackets around the conditions in this code.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Petit Problème

 

Sujets relatifs
Petit problème avec mon formulaire d'inscription/connexionPetit problème Java
Petit Qcm et petit problèmetable hachage petit problème c++
Petit problème d'alignementPetit probleme
Petit un problème avec structurePetit problème ajax avec JSON
Petit probleme de batchPetit problème avec Lightbox 2
Plus de sujets relatifs à : Petit Problème


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR