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

  FORUM HardWare.fr
  Programmation

  [C++] je débute

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] je débute

n°98481
Library
Posté le 09-02-2002 à 20:11:45  profilanswer
 

Bonjour
 
J'aimerai créer un programme en C++ pour jouer au morpion (sous dos bien sur). J'ai commencé mais deja 7 erreurs lors de la compilation !
j'ai essayé plein de trucs mais a chaque fois c'est pire. Quelqu'un pourrait me dire ce qui ne va pas ?
 
Le programme :

Citation :

#include<iostream.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
 
 
 
void affiche (int tableau[3][3])
{
 int i,j;
 for(i=0;i<3;i++)
 {
  for(j=0;j<3;j++)
  {
   cout<<" ";
   switch (tableau[i][j]);
   {
    case NULL:
     cout<<" ";
     break;
    case 0:
     cout<<" ";
     break;
    case 1:
     cout<<"X";
     break;
    case 2:
     cout<<"O";
     break;
    default:
     break;
   }
  }
  cout<<"\n\n";
 }
 
}
 
 
int main()  
{
 int tableau [3][3];
 affiche(tableau[3][3]);
 
}


 
les erreurs :

Citation :


Compiling...
morpion.cpp
E:\programmation\morpion.cpp(16) : error C2065: 'swich' : undeclared identifier
E:\programmation\morpion.cpp(18) : error C2046: illegal case
E:\programmation\morpion.cpp(21) : error C2046: illegal case
E:\programmation\morpion.cpp(24) : error C2046: illegal case
E:\programmation\morpion.cpp(27) : error C2046: illegal case
E:\programmation\morpion.cpp(30) : error C2047: illegal default
E:\programmation\morpion.cpp(43) : error C2664: 'affiche' : cannot convert parameter 1 from 'int' to 'int [][3]'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
E:\programmation\morpion.cpp(45) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
 
morpion.obj - 7 error(s), 1 warning(s)


 
merci d'avance :)

 

[jfdsdjhfuetppo]--Message édité par Library--[/jfdsdjhfuetppo]

mood
Publicité
Posté le 09-02-2002 à 20:11:45  profilanswer
 

n°98482
hectoras
Posté le 09-02-2002 à 20:15:17  profilanswer
 

:hello: lib
 
désolé moi déjà php ça va un peu mal mais alors la C...

n°98483
Piksou
Posté le 09-02-2002 à 20:16:20  profilanswer
 

1ere erreur: t'as tapé swich pour switch  :sarcastic:

n°98485
Piksou
Posté le 09-02-2002 à 20:16:51  profilanswer
 

Citation :

E:\programmation\morpion.cpp(16) : error C2065: 'swich' : undeclared identifier


c pas clair ?

n°98486
Library
Posté le 09-02-2002 à 20:19:45  profilanswer
 

ben ce sont mes premieres lignes en C++...
 
j'ai corrigé le swich en switch, mais voila les erreurs maintenant :
 

Citation :

Compiling...
morpion.cpp
E:\programmation\morpion.cpp(16) : warning C4060: switch statement contains no 'case' or 'default' labels
E:\programmation\morpion.cpp(18) : error C2046: illegal case
E:\programmation\morpion.cpp(21) : error C2046: illegal case
E:\programmation\morpion.cpp(24) : error C2046: illegal case
E:\programmation\morpion.cpp(27) : error C2046: illegal case
E:\programmation\morpion.cpp(30) : error C2047: illegal default
E:\programmation\morpion.cpp(43) : error C2664: 'affiche' : cannot convert parameter 1 from 'int' to 'int [][3]'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
E:\programmation\morpion.cpp(45) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
 
morpion.obj - 6 error(s), 2 warning(s)


 
merci de ton aide en tous cas

n°98489
Rasta Knig​ht
Houston, I've got a problem
Posté le 09-02-2002 à 20:25:19  profilanswer
 

je comprends pas un truc, tes "cases" doivent prendre d'après ton prog NULL, 0, 1 ou 2 or tu fais switch(tableau(i,j)) et je ne vois pas comment tableau(i,j) pourrait prendre une de ces valeurs... :/
 
PS : Je raconte peut-être des conneries aussi, chuis super débutant en C ;)


---------------
Le tout c'est d'y croire! DaBZHWDT site : www.setibzh.com
n°98491
Library
Posté le 09-02-2002 à 20:28:15  profilanswer
 

pour l'instant j'ai voulu faire que le sous programme qui "affiche" les cases du morpion, plus tard (des que les joueurs auront commencé a jouer, je mettrai des 1 ou des 2 dans la matrice "tableau", ce qui devrait afficher des croix et des ronds)
c pas comme ca qu'il faut faire ?

n°98494
Rasta Knig​ht
Houston, I've got a problem
Posté le 09-02-2002 à 20:32:57  profilanswer
 

chais pa trop méga débutant aussi (6h de cours, et pas à faire des morpions :D )
 
Par contre pour le deuxième warning, tu devrais remplacer "int main" par "void main", ça devrait passer je pense.


---------------
Le tout c'est d'y croire! DaBZHWDT site : www.setibzh.com
n°98496
Kristoph
Posté le 09-02-2002 à 20:33:56  profilanswer
 

Tu a mis un ; à la fin de ton switch et avant ton bloc {} c'est pas bon, retire le.
 
De plus, enleve completement la section case NULL: parceque ca ne sert à rien. En général il n'y a que les pointeurs qui contiennent NULL et ici c'est des entiers.
 
En fait je ne vois pas a quoi pouvait servir cette partie avec case NULL: :)

n°98497
Piksou
Posté le 09-02-2002 à 20:35:00  profilanswer
 

rasta: :non:: le void poiur main, c mal  :non:

mood
Publicité
Posté le 09-02-2002 à 20:35:00  profilanswer
 

n°98498
Rasta Knig​ht
Houston, I've got a problem
Posté le 09-02-2002 à 20:36:02  profilanswer
 

Piksou> Pourquoi, étant donné qu'apparement son prog ne renvoie rien en sortie? :??:


---------------
Le tout c'est d'y croire! DaBZHWDT site : www.setibzh.com
n°98499
Kristoph
Posté le 09-02-2002 à 20:36:09  profilanswer
 

A j'oubliais la plus grosse erreur : le passage de tableau en paramètre.
 
     affiche(tableau[3][3]);
 
Il faut faire ca :
 
      affiche(tableau);

n°98500
Piksou
Posté le 09-02-2002 à 20:36:40  profilanswer
 

bah c considéré comme pas propre
il me semble que gcc envoie un warning
qu'il renvoie plutot zéro

n°98501
Rasta Knig​ht
Houston, I've got a problem
Posté le 09-02-2002 à 20:37:48  profilanswer
 

ben là le compilo à l'air de pas apprécier le "int main", c pkoi je comprends pas :/


---------------
Le tout c'est d'y croire! DaBZHWDT site : www.setibzh.com
n°98502
Piksou
Posté le 09-02-2002 à 20:38:48  profilanswer
 

il rale paske ça renvoie rien
il faut juste ajouter un return
j'avais raison pour gcc
 

Citation :

test.c: In function `main':
test.c:7: warning: return type of `main' is not `int'


---------------
« Le verbe "aimer" est le plus compliqué de la langue. Son passé n'est jamais simple, son présent n'est qu'imparfait et son futur toujours conditionnel. » Jean Cocteau
n°98503
Library
Posté le 09-02-2002 à 20:38:54  profilanswer
 

yes, merci a tous, j'ai remplacé le tableau[3][3] par tableau, viré le ; apres le switch et viré le case NULL et maintenant ca marche tres bien. Merci a tous !

n°98512
GhzMsnet
ma citation
Posté le 09-02-2002 à 21:07:17  profilanswer
 

faudra que tu me le passes  :)

n°98517
XuTi
Posté le 09-02-2002 à 22:00:36  profilanswer
 

au fait! ce n est pas de la programmation C++ que tu fais la... mais du C (l utilisation de cout<< et cin>> n est qu une facilite pour remplacer le printf et le scanf).
 
Quand tu feras des classes, la tu programmeras en C++.

n°98521
LeGreg
Posté le 09-02-2002 à 22:47:05  profilanswer
 

oui enfin le C++ c'est un langage multiparadigme
(dixit son auteur)
Tu n'es pas oblige de faire de l'objet pour
programmer en C++.
La plupart des regles C->C++ sont optionnelles
mais facilitent la tache du programmeur
quand elles sont utilisees donc tu aurais
tort de ne pas les utiliser sauf quand
tu sais que ca te penalise au niveau performance.
(mais pour un morpion les performances ca devrait
aller :P).
 
Sinon le int main c'est pas optionnel
c'est la norme parce que main est une fonction
qui est appelee par l'init du programme
et que cette init attend une valeur de retour.
 
A+
LEGREG

n°98529
Library
Posté le 09-02-2002 à 23:40:57  profilanswer
 

j'ai continué un peu le programme, au moment ou j'en suis il n'y a pas d'erreur quand je compile et que je crée le .exe mais pourtant lorsque j'execute le .exe ca bug (histoire de mémoire)
 
la source actuelle est :
 

Citation :

#include<iostream.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
 
 
 
void affiche (int *tableau[3][3])
{
 int i,j;
 for(i=0;i<3;i++)
 {
  for(j=0;j<3;j++)
  {
   cout<<" ";
   switch (*tableau[i][j]) /* l'erreur est sur cette ligne */
   {
    case 0:
     cout<<" ";
     break;
    case 1:
     cout<<"X";
     break;
    case 2:
     cout<<"O";
     break;
    default:
     break;
   }
  }
  cout<<"\n\n";
 }
 
}
 
int gagne (int *tableau[3][3])
{
 int i,j,temp,gagne;
 /* verifie possibilité par possibilité */
 for (i=0;i<3;i++)  
 {
  temp=*tableau[i][0];
  gagne=1;
  if (temp==0) {continue;}
  for (j=1;j<3;j++)
  {
   if (*tableau[i][j] != temp) {continue; gagne=0;}
  }
  if (gagne==1) {return(temp);}
 }
 
 for (i=0;i<3;i++)  
 {
  temp=*tableau[0][i];
  gagne=1;
  if (temp==0) {continue;}
  for (j=1;j<3;j++)
  {
   if (*tableau[j][i] != temp) {continue; gagne=0;}
  }
  if (gagne==1) {return(temp);}
 }
 
 if (*tableau[0][0]==*tableau[1][1] && *tableau[0][0]==*tableau[2][2]) {return(*tableau[1][1]);}
 if (*tableau[0][2]==*tableau[1][1] && *tableau[1][1]==*tableau[2][0]) {return(*tableau[1][1]);}
 
 return(0);
 
}
 
void init (int *tableau[3][3])
{
}
 
void main()  
{
 int *tableau[3][3],i,p;
 init(tableau);
 p=0;
 i=0;
 do  
 {
 affiche(tableau);
 cout<<p;
 p=(p+1)%2;
 i++;
 } while (gagne(tableau)==0 || i>100);
 cout<<gagne(tableau);
 
 
}


 
j'ai mis la ligne ou il me donne l'erreur lorsqu'il passe en mode débuggage.
Ca doit etre un probleme avec les pointeurs, mais j'y comprend pas grand chose a ces machins...

n°98534
Kristoph
Posté le 10-02-2002 à 00:01:25  profilanswer
 

Bah, il va falloir apprendre :)
 
En fait, dans ton tableau "int tableau[3][3];", tableau est un pointeur deguisé. Donc quand tu dit "void affiche (int tableau[3][3])", affiche prend déja un pointeur en paramètre sans que tu ne le sache. Ensuite, pour utiliser ce tableau, tout ce que tu a à faire c'est :
 
   void affiche(int tableau[3][3])
...
   tableau[i][j];
 
et non :
   void affiche(int *tableau[3][3])
...
   *tableau[i][j];
 
Et pour appeler affiche, c'est comme tu as fais.
 
En fait, ( mais je ne suis pas sur ), int * tableau[3][3]; n'est pas un tableau d'entiers mais un tableau de pointeurs vers des entiers :)

n°98553
Library
Posté le 10-02-2002 à 10:47:15  profilanswer
 

j'ai enlevé les deux * comme tu m'as dit, mais maintenant ca me met des erreurs lors de l'appel de la fonction :(
 

Citation :

#include<iostream.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
 
 
 
void affiche (int tableau[3][3])
{
 int i,j;
 for(i=0;i<3;i++)
 {
  for(j=0;j<3;j++)
  {
   cout<<" ";
   switch (tableau[i][j])
   {
    case 0:
     cout<<" ";
     break;
    case 1:
     cout<<"X";
     break;
    case 2:
     cout<<"O";
     break;
    default:
     break;
   }
  }
  cout<<"\n\n";
 }
 
}
 
int gagne (int *tableau[3][3])
{
 int i,j,temp,gagne;
 /* verifie possibilité par possibilité */
 for (i=0;i<3;i++)  
 {
  temp=*tableau[i][0];
  gagne=1;
  if (temp==0) {continue;}
  for (j=1;j<3;j++)
  {
   if (*tableau[i][j] != temp) {continue; gagne=0;}
  }
  if (gagne==1) {return(temp);}
 }
 
 for (i=0;i<3;i++)  
 {
  temp=*tableau[0][i];
  gagne=1;
  if (temp==0) {continue;}
  for (j=1;j<3;j++)
  {
   if (*tableau[j][i] != temp) {continue; gagne=0;}
  }
  if (gagne==1) {return(temp);}
 }
 
 if (*tableau[0][0]==*tableau[1][1] && *tableau[0][0]==*tableau[2][2]) {return(*tableau[1][1]);}
 if (*tableau[0][2]==*tableau[1][1] && *tableau[1][1]==*tableau[2][0]) {return(*tableau[1][1]);}
 
 return(0);
 
}
 
void init (int *tableau[3][3])
{
}
 
void main()  
{
 int *tableau[3][3],i,p;
 init(tableau);
 p=0;
 i=0;
 do  
 {
 affiche(tableau);
 cout<<p;
 p=(p+1)%2;
 i++;
 } while (gagne(tableau)==0 || i>100);
 cout<<gagne(tableau);
 
 
}


 
 
les erreurs :

Citation :

Compiling...
morpion.cpp
E:\programmation\morpion.cpp(83) : error C2664: 'affiche' : cannot convert parameter 1 from 'int *[3]' to 'int [][3]'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
 
morpion.obj - 1 error(s), 0 warning(s)

n°98620
Library
Posté le 10-02-2002 à 14:36:21  profilanswer
 

:bounce: svp j'ai vraiment besoin de vous !

n°98624
Kristoph
Posté le 10-02-2002 à 14:59:01  profilanswer
 

en fait, il faut enlever TOUTE les * devant tableau dans tout ton programme, même dans le main : int tableau[3][3]; à la place de int * tableau[3][3];
 
Tu n'as pas besoin de pointeurs ici.

n°98632
Library
Posté le 10-02-2002 à 15:26:58  profilanswer
 

ben j'en ai besoin pour retourner un tableau dans une fonction. C'est possible ? (par une fonction int fonction (tableau) ?)

n°98633
Kristoph
Posté le 10-02-2002 à 15:32:27  profilanswer
 

En fait, la tu manipule des tableaux de pointeurs vers des int :)
 
Si tu fais :
 
int tableau[3][3];
affiche(tableau);
 
Tu passes déjà un pointeur en paramètre car tableau est équivalent à un pointeur :). Dans ce cas prècis tu n'as pas à t'en faire, ça passe tout seul. La où il y aurait des problèmes se serait si ton tableau n'avait pas une taille fixée à l'avance et alors il faudrait vraiment travailler avec des pointeurs.

n°98635
Library
Posté le 10-02-2002 à 15:41:41  profilanswer
 

d'accord, je vais virer tous les pointeurs, t'as surement raison, je dois pas en avoir besoin encore (j'en aurai besoin pour une autre partie de mon programme, mais bcp bcp plus tard)
 
merci a toi :)

mood
Publicité
Posté le   profilanswer
 


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

  [C++] je débute

 

Sujets relatifs
je débute (depuis ce matin) avec SMIL et j'y arrvive pas[C] je debute juste
[SGBD]je debute oui mais avec koi???Visual C++ : je débute
Débute en java!!! 
Plus de sujets relatifs à : [C++] je débute


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)