Rechercher : dans
Par :

Violation d'accès (erreur de segmentation)

Dernière réponse le 9 oct 2008 à 16:55:06 saphira5, le 9 oct 2008 à 14:07:50 
 Signaler ce message aux modérateurs

Bonjour,
Mon programme C n'a pas d'erreur de compilation mais lors de l'exécution, un warning apparaît "Une violation d'accès (erreur de segmentation) est apparue dans votre programme". J'utilise Dev-c. Mon programme doit effectuer plusieurs boucles et j'ai défini les boucles par des fonctions. Le problème peut-il venir d'ici?

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « violation d'accès (erreur de segmentation) » dans :
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
[Outlook] Réponse du serveur : Erreur 554 - Relay Access denied VoirVotre client de messagerie vous affiche l'erreur suivante : Erreur 554 - Relay Access Denied Ce problème est lié à l'utilisation d'un serveur de courrier sortant (serveur SMTP) sur un domaine n'appartenant pas au fournisseur d'accès. En effet, afin...
Codes d'erreur de Windows VoirLa liste ci-dessous détaille les codes d'erreur s'affichant dans les boîtes de dialogue sous Windows : Code Description ------------------------ 1 Fonction incorrecte. 2 Le fichier spécifié est introuvable. 3 Le chemin d'accès spécifié...

1

;), le 9 oct 2008 à 14:09:52

Ben ouais surement que ca vient d'un problème d'indice dans un tableau.
Debug ton truc pas à pas si tu parviens pas à voir l'erreur.

Répondre à ;)

2

saphira5, le 9 oct 2008 à 14:13:57

Mon programme stocke des valeurs dans un tableau à 2 dimensions mais au bout d'un moment, il ne stocke pas la valeur mais doit la voir plutôt comme une adresse. Ma boucle principale fonctionne une à 2 foiset au passage d'après ca merde.

Répondre à saphira5

3

;), le 9 oct 2008 à 14:15:36

Donc tu sais d'où vient le problème, c'est tout bon. On peut pas le résoudre sans avoir le code sous les yeux...

Répondre à ;)

5

saphira5, le 9 oct 2008 à 14:22:08

Le programme est un peu long, il permet de reconstituer un puzzle de 9 pièces carrées.

#include <stdio.h>

/*déclaration des variables*/
int a,b,c,d,i,n,w,x,y,z,I,K,X,Y;

/*déclaration des tableaux*/
int A[10],B[10],C[10],D[10],E[10],R[10];
int P[3][3];

/*Déclaration des fonctions*/
void PuzzleFini(void);
void RestePiece(void);
void PieceLibre(void);
void TestPiece(void);
void MemoPiece(void);
void EmplSuiv(void);
void EmplPreced(void);
void PiecSuiv(void);
void Affichage(void);
void pieceactive(void);
void testprincipale(void);
void etatrotation(void);


void PuzzleFini(void)
{
if (Y!=3)
{
RestePiece();
}
else
{
printf ("puzzle fini!\n");
Affichage();
printf("Le calvaire est fini.");
}
}

void RestePiece(void)
{
if (((X==0)||(X==2))&&((Y==0)||(Y==2))&&(I>3))
{
EmplPreced();
}
if ((((X==0)||(X==2))&&(Y>0)&&(Y<2)&&(I>7))||((X>0)&&(X<2)&&((Y==0)||(Y==2))&&(I>7)))
{
EmplPreced();
}
if ((X>0)&&(X<2)&&(Y>0)&&(Y<2)&&(I>9))
{
EmplPreced();
}
else
{
PieceLibre();
}
}

void PieceLibre(void)
{
if(E[I]==0)
{
TestPiece();
}
else
{
PiecSuiv();
}

}

void TestPiece(void)
{
if (X==0)
{w=1;}
else
{
i=P[X-1][Y];
n=R[i];
if (n==0)
{w=C[i];}
if (n==1)
{w=D[i];}
if (n==2)
{w=A[i];}
if (n==3)
{w=B[i];}
}

if(Y==0)
{x=1;}
else
{
i=P[X][Y-1];
n=R[i];
if (n==0)
{x=D[i];}
if (n==1)
{x=A[i];}
if (n==2)
{x=B[i];}
if (n==3)
{x=C[i];}
}

if (X==2)
{y=1;}

if (Y==2)
{z=1;}

pieceactive();
}

void pieceactive(void)
{
n=R[I];
if (n==0)
{a=A[I];b=B[I];c=C[I];d=D[I];}
if (n==1)
{a=B[I];b=C[I];c=D[I];d=A[I];}
if (n==2)
{a=C[I];b=D[I];c=A[I];d=B[I];}
if (n==3)
{a=D[I];b=A[I];c=B[I];d=C[I];}
testprincipale();
}

void testprincipale(void)
{
if ((a!=w)||(b!=x))
{
etatrotation();
}
else
{
if(Y==2)
{
if(c!=y)
{etatrotation();}
}
if(X==2)
{
if(d!=z)
{etatrotation();}
}
else
{MemoPiece();}
}
}

void etatrotation(void)
{
R[I]=R[I]+1;
if (R[I]==4)
{
R[I]=0;
PiecSuiv();
}
else
{
pieceactive();
}
}

void MemoPiece(void)
{
if ((X==0)&&(Y==0))
{P[0][0]=I+1;}
if ((X==1)&&(Y==0))
{P[1][0]=I+1;}
if ((X==2)&&(Y==0))
{P[2][0]=I+1;}
if ((X==0)&&(Y==1))
{P[0][1]=I+1;}
if ((X==1)&&(Y==1))
{P[1][1]=I+1;}
if ((X==2)&&(Y==1))
{P[2][1]=I+1;}
if ((X==0)&&(Y==2))
{P[0][2]=I+1;}
if ((X==1)&&(Y==2))
{P[1][2]=I+1;}
if ((X==2)&&(Y==2))
{P[2][2]=I+1;}
E[I]=1;
EmplSuiv();
}

void EmplSuiv(void)
{
X=X+1;
if (X>2)
{
X=0;
Y=Y+1;
}
if (((X==0)||(X==2))&&((Y==0)||(Y==2)))
{I=0;}
if ((((X==0)||(X==2))&&(Y>0)&&(Y<2))||((X>0)&&(X<2)&&((Y==0)||(Y==2))))
{I=4;}
if ((X>0)&&(X<2)&&(Y>0)&&(Y<2))
{I=8;}
PuzzleFini();
}

void EmplPreced(void)
{
X=X-1;
if (X==0)
{
X=2;
Y=Y-1;
}
I=P[X][Y]-1;
E[I]=0;
R[I]=R[I]+1;
RestePiece();
}

void PiecSuiv(void)
{
I=I+1;
RestePiece();
}

void Affichage(void)
{
printf("Tableau pieces:\n");
X=0;
Y=0;
do
{
K=P[X][Y];
printf("%d ",K);
X=X+1;
if (X>2)
{
printf("\n");
X=0;
Y=Y+1;
}
}
while(Y<3);

printf("Tableau rotation:\n");
X=0;
Y=0;
do
{
i=P[X][Y];
K=R[i];
printf("%d ",K);
X=X+1;
if (X>2)
{
printf("\n");
X=0;
Y=Y+1;
}
}
while(Y<3);
}

main()
{
X=0;
Y=0;
K=0;
I=0;
while(K<10)
{
R[K]=0;
E[K]=0;
K++;
}
while(Y<3)
{
while(X<3)
{
P[X][Y]=0;
X++;
}
if(X==3)
{
Y=Y+1;
X=0;
}
}

A[0]=1; B[0]=2; C[0]=14; D[0]=1;
A[1]=1; B[1]=1; C[1]=2; D[1]=14;
A[2]=1; B[2]=1; C[2]=3; D[2]=4;
A[3]=1; B[3]=1; C[3]=4; D[3]=3;
A[4]=1; B[4]=3; C[4]=13; D[4]=2;
A[5]=1; B[5]=4; C[5]=5; D[5]=3;
A[6]=1; B[6]=4; C[6]=13; D[6]=4;
A[7]=1; B[7]=14; C[7]=7; D[7]=2;
A[8]=5; B[8]=7; C[8]=13; D[8]=17;
A[9]=5; B[9]=7; C[9]=13; D[9]=13;

Y=0;
K=0;
PuzzleFini();
getchar();
}

Si tu as des questions sur le principe de fonctionnement, hésite pas. Encore merci.

Répondre à saphira5

7

;), le 9 oct 2008 à 14:30:34

Oula, perso j'ai rien pour test le prog là et à lire c'est plutôt relou (en plus pas fait de C depuis 1an au moins).
Donc debug toi même ca t'apportera plus qu'une réponse toute faite ;)

tu sais debugger? Essai d'avoir ce reflexe dès maintenant si c'est pas le cas.

Répondre à ;)

8

saphira5, le 9 oct 2008 à 14:38:30

En debuggant, il perd la destination de l'assignation et je vois bien que l'assignation ne se fait pas pourtant les valeurs de mes variables sont bonnes ce qui devrait permettre l'assignation. L'assignation s'effectue correctement sur les 2 premiers passages dans la boucle mais au troisième passage???

Répondre à saphira5

4

oupsman, le 9 oct 2008 à 14:16:52

Salut, "erreur de segmentation" veut dire qu'ily a un pointeur qui pointe là où il ne doit pas. Vérifies bien si t'aurais pas oublié d'initialiser un pointeur quelque part ou peut-ête que ton pointeur déborde un tableau .... comme ce qui est dit dans le post 1, faut voir pas à pas tes fonctions

Répondre à oupsman

6

saphira5, le 9 oct 2008 à 14:25:47

Je n'utilise pas de pointeur. J'assigne un entier à un emplacement d'un tableau d'entiers(par coordonnées). C'est pour ca que je ne comprends pas.

Répondre à saphira5

9

oupsman, le 9 oct 2008 à 15:44:52

Essaies ce programme, il marche chez moi, dis-nous s'il y a un problème :

#include <stdio.h>

/*déclaration des variables*/
int a,b,c,d,i,n,w,x,y,z,I,K,X,Y;

/*déclaration des tableaux*/
int A[10],B[10],C[10],D[10],E[10],R[10];
int P[3][3];

/*Déclaration des fonctions*/
void PuzzleFini(void);
void RestePiece(void);
void PieceLibre(void);
void TestPiece(void);
void MemoPiece(void);
void EmplSuiv(void);
void EmplPreced(void);
void PiecSuiv(void);
void Affichage(void);
void pieceactive(void);
void testprincipale(void);
void etatrotation(void);

/*******************************************************/
void PuzzleFini(void){
if(Y!=3) RestePiece();
else{
printf ("puzzle fini!\n");
Affichage();
printf("Le calvaire est fini.");
}
}
/********************************************************/
void RestePiece(void){
if (((X==0)||(X==2))&&((Y==0)||(Y==2))&&(I>3)) EmplPreced();
if ((((X==0)||(X==2))&&(Y>0)&&(Y<2)&&(I>7))||((X>0)&&(X<2)&&((Y==0)||(Y==2))&&(I>7))) EmplPreced();

if ((X>0)&&(X<2)&&(Y>0)&&(Y<2)&&(I>9)) EmplPreced();
else PieceLibre();
}
/*********************************************************/
void PieceLibre(void){
if(E[I]==0) TestPiece();
else PiecSuiv();
}
/************************************************************/
void TestPiece(void){
if(X==0) w=1;
else i=P[X-1][Y];
n=R[i];
if(n==0) w=C[i];
if(n==1) w=D[i];
if(n==2) w=A[i];
if(n==3) w=B[i];
if(Y==0) x=1;
else i=P[X][Y-1];
n=R[i];
if (n==0) x=D[i];
if (n==1) x=A[i];
if (n==2) x=B[i];
if (n==3) x=C[i];
if (X==2) y=1;
if (Y==2) z=1;

pieceactive();
}
/*********************************************/
void pieceactive(void)
{
n=R[I];
if (n==0)
{a=A[I];b=B[I];c=C[I];d=D[I];}
if (n==1)
{a=B[I];b=C[I];c=D[I];d=A[I];}
if (n==2)
{a=C[I];b=D[I];c=A[I];d=B[I];}
if (n==3)
{a=D[I];b=A[I];c=B[I];d=C[I];}
testprincipale();
}

void testprincipale(void)
{
if ((a!=w)||(b!=x))
{
etatrotation();
}
else
{
if(Y==2)
{
if(c!=y)
{etatrotation();}
}
if(X==2)
{
if(d!=z)
{etatrotation();}
}
else
{MemoPiece();}
}
}

void etatrotation(void)
{
R[I]=R[I]+1;
if (R[I]==4)
{
R[I]=0;
PiecSuiv();
}
else
{
pieceactive();
}
}

void MemoPiece(void)
{
if ((X==0)&&(Y==0))
{P[0][0]=I+1;}
if ((X==1)&&(Y==0))
{P[1][0]=I+1;}
if ((X==2)&&(Y==0))
{P[2][0]=I+1;}
if ((X==0)&&(Y==1))
{P[0][1]=I+1;}
if ((X==1)&&(Y==1))
{P[1][1]=I+1;}
if ((X==2)&&(Y==1))
{P[2][1]=I+1;}
if ((X==0)&&(Y==2))
{P[0][2]=I+1;}
if ((X==1)&&(Y==2))
{P[1][2]=I+1;}
if ((X==2)&&(Y==2))
{P[2][2]=I+1;}
E[I]=1;
EmplSuiv();
}

void EmplSuiv(void)
{
X=X+1;
if (X>2)
{
X=0;
Y=Y+1;
}
if (((X==0)||(X==2))&&((Y==0)||(Y==2)))
{I=0;}
if ((((X==0)||(X==2))&&(Y>0)&&(Y<2))||((X>0)&&(X<2)&&((Y==0)||(Y==2))))
{I=4;}
if ((X>0)&&(X<2)&&(Y>0)&&(Y<2))
{I=8;}
PuzzleFini();
}

void EmplPreced(void)
{
X=X-1;
if (X==0)
{
X=2;
Y=Y-1;
}
I=P[X][Y]-1;
E[I]=0;
R[I]=R[I]+1;
RestePiece();
}

void PiecSuiv(void)
{
I=I+1;
RestePiece();
}

void Affichage(void)
{
printf("Tableau pieces:\n");
X=0;
Y=0;
do
{
K=P[X][Y];
printf("%d ",K);
X=X+1;
if (X>2)
{
printf("\n");
X=0;
Y=Y+1;
}
}
while(Y<3);

printf("Tableau rotation:\n");
X=0;
Y=0;
do
{
i=P[X][Y];
K=R[i];
printf("%d ",K);
X=X+1;
if (X>2)
{
printf("\n");
X=0;
Y=Y+1;
}
}
while(Y<3);
}

/**************************************************************************/
/**************************************************************************/
int main(){

X=0, Y=0, K=0, I=0;

while(K<10){
R[K]=0;
E[K]=0;
K++;
}

while(Y<3){
while(X<3){
P[X][Y]=0;
X++;
}

if(X==3){
Y=Y+1;
X=0;
}
}

A[0]=1; B[0]=2; C[0]=14; D[0]=1;
A[1]=1; B[1]=1; C[1]=2; D[1]=14;
A[2]=1; B[2]=1; C[2]=3; D[2]=4;
A[3]=1; B[3]=1; C[3]=4; D[3]=3;
A[4]=1; B[4]=3; C[4]=13; D[4]=2;
A[5]=1; B[5]=4; C[5]=5; D[5]=3;
A[6]=1; B[6]=4; C[6]=13; D[6]=4;
A[7]=1; B[7]=14; C[7]=7; D[7]=2;
A[8]=5; B[8]=7; C[8]=13; D[8]=17;
A[9]=5; B[9]=7; C[9]=13; D[9]=13;

Y=0;
K=0;
PuzzleFini();
getchar();
return 0;
}

Répondre à oupsman

10

saphira5, le 9 oct 2008 à 15:52:26

Je n'ai rien d'afficher. et toi?

Répondre à saphira5

11

oupsman, le 9 oct 2008 à 15:53:58

Normal, dans ton programme il n'es tnul part indiqué qu'il faut afficher quoi que ce soit MDR ;-D

Répondre à oupsman

12

saphira5, le 9 oct 2008 à 15:57:22

Dans la partie PuzzleFini, si la condition n'est pas remplie, un affichage s'effectue.

Répondre à saphira5

13

oupsman, le 9 oct 2008 à 16:04:15

Essaies ça et tu vas rigoler ;-)


#include <stdio.h>

/*déclaration des variables*/
int a,b,c,d,i,n,w,x,y,z,I,K,X,Y;

/*déclaration des tableaux*/
int A[10],B[10],C[10],D[10],E[10],R[10];
int P[3][3];

/*Déclaration des fonctions*/
void PuzzleFini(void);
void RestePiece(void);
void PieceLibre(void);
void TestPiece(void);
void MemoPiece(void);
void EmplSuiv(void);
void EmplPreced(void);
void PiecSuiv(void);
void Affichage(void);
void pieceactive(void);
void testprincipale(void);
void etatrotation(void);

/*******************************************************/
void PuzzleFini(void){
if(Y!=3){
printf("\nIci Y vaut %d, et %d est bien different de 3, donc il est normal qu'il ne passe pas par else lol\n",Y,Y);
RestePiece();
}
else{
printf ("puzzle fini!\n");
Affichage();
printf("Le calvaire est fini.");
}
}
/********************************************************/
void RestePiece(void){
if (((X==0)||(X==2))&&((Y==0)||(Y==2))&&(I>3)) EmplPreced();
if ((((X==0)||(X==2))&&(Y>0)&&(Y<2)&&(I>7))||((X>0)&&(X<2)&&((Y==0)||(Y==2))&&(I>7))) EmplPreced();

if ((X>0)&&(X<2)&&(Y>0)&&(Y<2)&&(I>9)) EmplPreced();
else PieceLibre();
}
/*********************************************************/
void PieceLibre(void){
if(E[I]==0) TestPiece();
else PiecSuiv();
}
/************************************************************/
void TestPiece(void){
if(X==0) w=1;
else i=P[X-1][Y];
n=R[i];
if(n==0) w=C[i];
if(n==1) w=D[i];
if(n==2) w=A[i];
if(n==3) w=B[i];
if(Y==0) x=1;
else i=P[X][Y-1];
n=R[i];
if (n==0) x=D[i];
if (n==1) x=A[i];
if (n==2) x=B[i];
if (n==3) x=C[i];
if (X==2) y=1;
if (Y==2) z=1;

pieceactive();
}
/*********************************************/
void pieceactive(void)
{
n=R[I];
if (n==0)
{a=A[I];b=B[I];c=C[I];d=D[I];}
if (n==1)
{a=B[I];b=C[I];c=D[I];d=A[I];}
if (n==2)
{a=C[I];b=D[I];c=A[I];d=B[I];}
if (n==3)
{a=D[I];b=A[I];c=B[I];d=C[I];}
testprincipale();
}

void testprincipale(void)
{
if ((a!=w)||(b!=x))
{
etatrotation();
}
else
{
if(Y==2)
{
if(c!=y)
{etatrotation();}
}
if(X==2)
{
if(d!=z)
{etatrotation();}
}
else
{MemoPiece();}
}
}

void etatrotation(void)
{
R[I]=R[I]+1;
if (R[I]==4)
{
R[I]=0;
PiecSuiv();
}
else
{
pieceactive();
}
}

void MemoPiece(void)
{
if ((X==0)&&(Y==0))
{P[0][0]=I+1;}
if ((X==1)&&(Y==0))
{P[1][0]=I+1;}
if ((X==2)&&(Y==0))
{P[2][0]=I+1;}
if ((X==0)&&(Y==1))
{P[0][1]=I+1;}
if ((X==1)&&(Y==1))
{P[1][1]=I+1;}
if ((X==2)&&(Y==1))
{P[2][1]=I+1;}
if ((X==0)&&(Y==2))
{P[0][2]=I+1;}
if ((X==1)&&(Y==2))
{P[1][2]=I+1;}
if ((X==2)&&(Y==2))
{P[2][2]=I+1;}
E[I]=1;
EmplSuiv();
}

void EmplSuiv(void)
{
X=X+1;
if (X>2)
{
X=0;
Y=Y+1;
}
if (((X==0)||(X==2))&&((Y==0)||(Y==2)))
{I=0;}
if ((((X==0)||(X==2))&&(Y>0)&&(Y<2))||((X>0)&&(X<2)&&((Y==0)||(Y==2))))
{I=4;}
if ((X>0)&&(X<2)&&(Y>0)&&(Y<2))
{I=8;}
PuzzleFini();
}

void EmplPreced(void)
{
X=X-1;
if (X==0)
{
X=2;
Y=Y-1;
}
I=P[X][Y]-1;
E[I]=0;
R[I]=R[I]+1;
RestePiece();
}

void PiecSuiv(void)
{
I=I+1;
RestePiece();
}

void Affichage(void)
{
printf("Tableau pieces:\n");
X=0;
Y=0;
do
{
K=P[X][Y];
printf("%d ",K);
X=X+1;
if (X>2)
{
printf("\n");
X=0;
Y=Y+1;
}
}
while(Y<3);

printf("Tableau rotation:\n");
X=0;
Y=0;
do
{
i=P[X][Y];
K=R[i];
printf("%d ",K);
X=X+1;
if (X>2)
{
printf("\n");
X=0;
Y=Y+1;
}
}
while(Y<3);
}

/**************************************************************************/
/**************************************************************************/
int main(){

X=0, Y=0, K=0, I=0;

while(K<10){
R[K]=0;
E[K]=0;
K++;
}

while(Y<3){
while(X<3){
P[X][Y]=0;
X++;
}

if(X==3){
Y=Y+1;
X=0;
}
}

A[0]=1; B[0]=2; C[0]=14; D[0]=1;
A[1]=1; B[1]=1; C[1]=2; D[1]=14;
A[2]=1; B[2]=1; C[2]=3; D[2]=4;
A[3]=1; B[3]=1; C[3]=4; D[3]=3;
A[4]=1; B[4]=3; C[4]=13; D[4]=2;
A[5]=1; B[5]=4; C[5]=5; D[5]=3;
A[6]=1; B[6]=4; C[6]=13; D[6]=4;
A[7]=1; B[7]=14; C[7]=7; D[7]=2;
A[8]=5; B[8]=7; C[8]=13; D[8]=17;
A[9]=5; B[9]=7; C[9]=13; D[9]=13;

Y=0;
K=0;
PuzzleFini();
getchar();
return 0;
}

Répondre à oupsman

14

saphira5, le 9 oct 2008 à 16:08:12

Pourtant au fur et à mesure du programme Y est incrémenté donc il doit bien passer par else au bout d'un moment.

Répondre à saphira5

15

oupsman, le 9 oct 2008 à 16:12:39

Bah non, puisqu'avant la fin de ton programme, tu as écris :

int main(){

...
...
...
Y=0; /*ICI TU AS INITIALISÉ Y à 0*/
K=0;
PuzzleFini();
getchar();
return 0;
}

Répondre à oupsman

16

saphira5, le 9 oct 2008 à 16:16:19

Y=0 alors on va à RestePiéce() et quand Y sera = à 3 alors on fera Affichage().

Répondre à saphira5

17

oupsman, le 9 oct 2008 à 16:26:06

Je sais pas car je ne comprend rien de rien dans ton programme, j'ai juste débbugué. Pour la conception et erreur de raisonnement, c'est à toi de gérer.

Dans ton programme j'explique ce que tu lui demande de faire :

int main(){
.....
.........
ici je fais pleins de trucs;
ensuite j'initialise Y=0; et K=0;
ensuite je fais appel à PuzzleFini();
et je sors du programme;
}


si tu veux que Y bouge, il faut faire :

int main(){
.....
.........
ici je fais pleins de trucs;
je fais bouger Y;
ensuite je fais appel à PuzzleFini();
et je sors du programme;
}


ou sinon :

int main(){
.....
.........
ici je fais pleins de trucs;
ensuite j'initialise Y=0; et K=0;
ensuite je fais appel à PuzzleFini(); /*mais dans cette fonction tu fais bouger Y avant le teste*/
et je sors du programme;
}

Répondre à oupsman

18

saphira5, le 9 oct 2008 à 16:29:46

Je pensais qu'à chaque fois que je rentrais dans puzzlefini,
je repartais vers restepiece sauf si Y=3. Et là l'affichage se faisait.

Répondre à saphira5

19

oupsman, le 9 oct 2008 à 16:41:01

Dis moi ce que fait la fonction PuzzleFini(); et la fonction RestePiece();

mais si j'ai bien compris, ce que tu dois faire c'est :


int main(){
....
.......
while(Y!=3) RestePiece();
PuzzleFini();
getchar();
return 0;
}


Attention, je suppose que RestePiece() fait bien bouger Y et qu'au bout d'un moment Y sera égal à 3 parce que sinon ce sera une boucle infinie !!!!

Répondre à oupsman

20

saphira5, le 9 oct 2008 à 16:43:15

Merci beaucoup. Je vais essayer mais je crois que l'erreur était là. Je te redis ca. Merci

Répondre à saphira5

21

 oupsman, le 9 oct 2008 à 16:55:06
  • +1

Pas de quoi, juste 2 conseils :

1/Ton programme est presque illisible, si tu as plusieurs successions de if sans else, c'est mieux d'utiliser case.

2/Au lieu de trimbaler tout le tralala de ton hypertableau, je te suggère d'utiliser un seul tableau à 2 dimensions, par exemple int T[9][9]; et si besoin de modification, tu le prend en parametre dans tes fonctions, par exemple PuzzleFini(int T[9][ ]); .... etc

Tiens nous au courant ;-)

Répondre à oupsman