01net    Web


Actuellement en ligne : 259 Utilisateurs dont 11 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> Aide en langage C PUISSANCE 4 -boucle infinie-
Passionné(e) d'internet, de logiciels, de forums ? 01net recrute...
Auteur
Message
 
<     1       >
donaldalex2001
  
   
      ?   @     Posté le 06/12/2007 23:21:34  
Voter pour ce message
Bonjour tout le monde ,
voila je suis un peu dans le caca!! je ne trouve pas le pt virgule manquant j'ai beau chercher dans tout le programme que j'ai fait (surtout au dessus de la ligne qui indique cela) mais rien n'y fait je trouve pas!!
Si quelqu'un pourrai m'aider s'il vous plait des yeux neufs pourrait m'aider!!
thanks you very ++
ps: C'est du C

#include <conio.h>
#include <stdio.h>

void main (void)
{
char grille[6][7];
int nb_p,i,j,x,c,n;
char ja,jb,pa,pb,v;

//début du prog
//initialisation du tableau
for (i=1;i<=6;i++)
{
for (j=1;j<=7;i++)
grille[j]='$';
}

// initialisation des variables
ja='$';
jb='$' ;
pa='c' ;
pb='d' ;
nb_p=0 ;
v='o';
n=0;

// saisit du nom des joueurs
do
{
printf ("nom joueur 1");
scanf ("%c",&ja);
printf ("nom joueur 2");
scanf ("%c", &jb);
}
while ((ja='$') || (jb='$'));

do //do d'une super boucle
{
x=0;
do //do1
{
do
{
printf ("%c dans quel colonne désirez vous jouer", &ja);
scanf ("%i",&c);
}
while ((c<1) && (c>7));

if (grille[1][c]='$')
{
grille[1][c]=pa;
x=1;
}
else
{
if (grille[2][c]='$')
{
grille[2][c]=pa;
x=2;
}
else
{ if (grille[3][c]='$')
{
grille[3][c]=pa;
x=3;
}
else
{ if (grille[4][c]='$')
{
grille[4][c]=pa;
x=4;
}
else
{ if (grille[5][c]='$')
{
grille[5][c]=pa;
x=5;
}
else
{ if (grille[6][c]='$')
{
grille[6][c]=pa;
x=6;
}
else
{printf ("la colonne est pleine");
}

}
}
}
}
}
}
while (x=0);//fin do1

// test pour voir si le joueur a gagné

//test horizontal vers la droite

for( j=c;j=c+3;j++)
{
while (grille[x][j]=pa){nb_p=nb_p+1;}
;}

//test horizontal vers la gauche
for( j=c;j=c-3;j--)
{
while (grille[x][j]=pa){nb_p=nb_p+1;}
;}

if (nb_p>=4) {v=ja} //<==VOICI LA LIGNE DONT ON ME DIT STATEMENTS MANQUANTS

// test première diagonale
else
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à droite
{
for (j=j+1)
{while (grille[j]=pa) {nb_p=nb_p+1;}
}
}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à gauche
{
for (j=j-1)
{while (grille[j]=pa) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=ja}
else // test seconde diagonale
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à gauche
{
for (j=j-1)
{while (grille[j]=pa) {nb_p=nb_p+1;}
;}
;}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à droite
{
for (j=j+1)
{while (grille[j]=pa) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=ja}
else
{ nb_p=0
for (i=x;i=x-3;i--)
{while(grille[c]=pa) {nb_p=nb_p+1}
}
if (nb_p>=4) {v=ja;}
;}
;}
;}
if(v='o'){x=o;}
//début second joueur
do //do1
{
do
{
printf ("%c dans quel colonne désirez vous jouer", &jb);
scanf ("%i",&c);
}
while ((c<1) && (c>7));

if (grille[1][c]='$')
{
grille[1][c]=pb;
x=1;
}
else
{
if (grille[2][c]='$')
{
grille[2][c]=pb;
x=2;
}
else
{ if (grille[3][c]='$')
{
grille[3][c]=pb;
x=3;
}
else
{ if (grille[4][c]='$')
{
grille[4][c]=pb;
x=4;
}
else
{ if (grille[5][c]='$')
{
grille[5][c]=pb;
x=5;
}
else
{ if (grille[6][c]='$')
{
grille[6][c]=pb;
x=6;
}
else
{printf ("la colonne est pleine");
}

}
}
}
}
}
}
while (x=0);//fin do1

// test pour voir si le joueur a gagné

//test horizontal vers la droite

for( j=c;j=c+3;j++)
{
while (grille[x][j]=pb){nb_p=nb_p+1;};
}

//test horizontal vers la droite
for( j=c;j=c-3;j--)
{
while (grille[x][j]=pb){nb_p=nb_p+1;};
}

if
(nb_p>=4) {v=jb}
// test première diagonale
else
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à droite
{
for (j=j+1)
{while (grille[j]=pb) {nb_p=nb_p+1;}
}
}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à gauche
{
for (j=j-1)
{while (grille[j]=pb) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=jb}
else // test seconde diagonale
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à gauche
{
for (j=j-1)
{while (grille[j]=pb) {nb_p=nb_p+1;}
;}
;}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à droite
{
for (j=j+1)
{while (grille[j]=pb) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=jb}
else
{ nb_p=0
for (i=x;i=x-3;i--)
{while(grille[c]=pb) {nb_p=nb_p+1}
}
if (nb_p>=4) {v=jb;}
;}
;}
;}

for (i=1;i=6;i++)
{
for (j=1;j=6;j++)
{
if (grille[j]!='$') {n=n+1;}
;}
;}

if (n=42) {v='e';}
;}
while ((v='o') && (v!='E')); // condition de répétition de la grande boucle

if ((v=ja) || (v=jb)) {printf ("BRAVO C'EST %c qui à gagner " ,v}
else {printf ("partie impossible");}

getch ();
}





-->Message édité par donaldalex2001 le 08/12/2007 21:20:39<--
donaldalex2001
  
   
      ?   @     Posté le 07/12/2007 00:41:35  
Voter pour ce message
Merci beaucoup c'était sa en effet plus une dizaine qui trainait dans le programme.
Maintenant j'ai un autre soucis...Quand je compile mon programme j'ai un message d'erreur qui marque ceci
access violation at 0x24402098
read of adresse 24402098
je ne comprends pas ce qu'il me demande si quelqu'un savait cela m'aiderai beaucoup.

voici le code C final si cela peut vous aider
PS j'ulise Borland C++ version 5.02

#include <conio.h>
#include <stdio.h>

void main (void)
{
char grille[6][7];
int nb_p,i,j,x,c,n;
char ja,jb,pa,pb,v;

//début du prog
//initialisation du tableau
for (i=1;i<=6;i++)
{
for (j=1;j<=7;i++)
grille[j]='$';
}

// initialisation des variables
ja='$';
jb='$' ;
pa='c' ;
pb='d' ;
nb_p=0 ;
v='o';
n=0;

// saisit du nom des joueurs
do
{
printf ("nom joueur 1");
scanf ("%c",&ja);
printf ("nom joueur 2");
scanf ("%c", &jb);
}
while ((ja='$') || (jb='$'));

do //do d'une super boucle
{
x=0;
do //do1
{
do
{
printf ("%c dans quel colonne désirez vous jouer", &ja);
scanf ("%i",&c);
}
while ((c<1) && (c>7));

if (grille[1][c]='$')
{
grille[1][c]=pa;
x=1;
}
else
{
if (grille[2][c]='$')
{
grille[2][c]=pa;
x=2;
}
else
{ if (grille[3][c]='$')
{
grille[3][c]=pa;
x=3;
}
else
{ if (grille[4][c]='$')
{
grille[4][c]=pa;
x=4;
}
else
{ if (grille[5][c]='$')
{
grille[5][c]=pa;
x=5;
}
else
{ if (grille[6][c]='$')
{
grille[6][c]=pa;
x=6;
}
else
{printf ("la colonne est pleine");
}

}
}
}
}
}
}
while (x=0);//fin do1

// test pour voir si le joueur a gagné

//test horizontal vers la droite

for( j=c;j=c+3;j++)
{
while (grille[x][j]=pa){nb_p=nb_p+1;}
;}

//test horizontal vers la gauche
for( j=c;j=c-3;j--)
{
while (grille[x][j]=pa){nb_p=nb_p+1;}
;}

if (nb_p>=4) {v=ja;}// test première diagonale
else
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à droite
{
for (j=j+1;;)
{while (grille[j]=pa) {nb_p=nb_p+1;}
}
}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à gauche
{
for (j=j-1;;)
{while (grille[j]=pa) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=ja;}
else // test seconde diagonale
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à gauche
{
for (j=j-1;;)
{while (grille[j]=pa) {nb_p=nb_p+1;}
;}
;}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à droite
{
for (j=j+1;;)
{while (grille[j]=pa) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=ja;}
else
{ nb_p=0;
for (i=x;i=x-3;i--)
{while(grille[c]=pa) {nb_p=nb_p+1;}
}
if (nb_p>=4) {v=ja;}
;}
;}
;}
if(v='o'){x=0;}
//début second joueur
do //do1
{
do
{
printf ("%c dans quel colonne désirez vous jouer", &jb);
scanf ("%i",&c);
}
while ((c<1) && (c>7));

if (grille[1][c]='$')
{
grille[1][c]=pb;
x=1;
}
else
{
if (grille[2][c]='$')
{
grille[2][c]=pb;
x=2;
}
else
{ if (grille[3][c]='$')
{
grille[3][c]=pb;
x=3;
}
else
{ if (grille[4][c]='$')
{
grille[4][c]=pb;
x=4;
}
else
{ if (grille[5][c]='$')
{
grille[5][c]=pb;
x=5;
}
else
{ if (grille[6][c]='$')
{
grille[6][c]=pb;
x=6;
}
else
{printf ("la colonne est pleine");
}

}
}
}
}
}
}
while (x=0);//fin do1

// test pour voir si le joueur a gagné

//test horizontal vers la droite

for( j=c;j=c+3;j++)
{
while (grille[x][j]=pb){nb_p=nb_p+1;};
}

//test horizontal vers la droite
for( j=c;j=c-3;j--)
{
while (grille[x][j]=pb){nb_p=nb_p+1;};
}

if
(nb_p>=4) {v=jb;}
// test première diagonale
else
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à droite
{
for (j=j+1;;)
{while (grille[j]=pb) {nb_p=nb_p+1;}
}
}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à gauche
{
for (j=j-1;;)
{while (grille[j]=pb) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=jb;}
else // test seconde diagonale
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à gauche
{
for (j=j-1;;)
{while (grille[j]=pb) {nb_p=nb_p+1;}
;}
;}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à droite
{
for (j=j+1;;)
{while (grille[j]=pb) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=jb;}
else
{ nb_p=0;
for (i=x;i=x-3;i--)
{while(grille[c]=pb) {nb_p=nb_p+1;}
}
if (nb_p>=4) {v=jb;}
;}
;}
;}

for (i=1;i=6;i++)
{
for (j=1;j=6;j++)
{
if (grille[j]!='$') {n=n+1;}
;}
;}

if (n=42) {v='e';}
;}
while ((v='o') && (v!='E')); // condition de répétition de la grande boucle

if ((v=ja) || (v=jb)) { printf ("BRAVO C'EST %c qui à gagner ",&v);}
else {printf ("partie impossible");}

getch ();
}




la4lverte
  
   
      ?   @     Posté le 07/12/2007 11:12:01  
Voter pour ce message
En language "C" le signe '=' indique une affectation et non pas une comparaison ce qui veut dire que si tu écris if (X='$') {Z=0;} l'élément X va prendre la valeur du caractère'$', l'expression sera toujours vrai et donc Z=0 toujours exécuté.

Chaque fois que tu veux exécuter une comparaison il faut utiliser le double signe égal à savoir: if (X=='$' {Z=0;}. C'est aussi vrai pour les "while".

Il faut donc revoir toutes les instructions de comparaison (if et while). Dans les options de compilation, mettre le degré de Warning au maximum (W3 je pense) plus le 'Debug mode'. Ton compilateur peut exécuter ton code en pas à pas pour mieux pièger les bugs.

Bonne chance.
la4lverte
  
   
      ?   @     Posté le 07/12/2007 11:29:40  
Voter pour ce message
C'est encore moi,

Pour ce qui est de l'erreur "access violation" pendant la phase de compilation (ce qui m'étonne) ça veut dire que c'est ton compilateur qui plante !

Alors, question: Ton PC a-t-il assez de mémoire? car "access violation" est le résultat de l'accès d'une adresse mémoire invalide.

Ci le bug arrive pendant l'exécution, revoie mes commentaires précédents.

A+
donaldalex2001
  
   
      ?   @     Posté le 07/12/2007 13:44:49  
Voter pour ce message
j'ai bien changé les = en == dans mon programme (car en fait j'ai traduit en langage c unalgo) mais cela ne marche tjrs pas- en fait sa compile sans "failed" la fenetre dos s'ouvre mais le prog marche pas . En effet j'ai tjrs un access violation par contre avec des données différentes cela donne ceci:
access violation at 0x401125

Please help me.... :??: :pleure:
-->Message édité par donaldalex2001 le 07/12/2007 13:49:17<--
la4lverte
  
   
      ?   @     Posté le 07/12/2007 17:23:08  
Voter pour ce message
Encore moi,
As-tu la possibilité avec ton environnement de développement d'exécuter ton code pas à pas. Si oui c'est la meilleure solution, Borland le permet. Sinon utilise dès le début de ton code (première ligne de code exécutable) la technique des printf(), si tu as le bug avant le 1er printf() vérifie les options de compilation et surtout celles par défaut. Il faut commencer par déterminer si c'est avant ou après l'exécution de ta première instruction d'où les printf() pour debugger. En règles générales un "acces violation" arrive souvent quand dans une boucle tu tourne un coup de trop en remplissant/lisant un tableau par exemple. Vérifie que tes indexes de tableau démarrent bien à 0 et que dans tes boucles tu ne dépasses pas la taille de tes tableaux. Petit rappel, un tableau de "string" doit avoir un caractère de plus '\0' en fin de string.
A+
donaldalex2001
  
   
      ?   @     Posté le 08/12/2007 15:01:16  
Voter pour ce message
rebonjour,
j'ai donc essayer avec la technique des printf(). Un premier printf apres la déclaration des variables est bon - cad je le vois s'afficher sur l'executable- mais un autre printf apres le premier "for" ne s'affiche pas ainsi que d'autres mis a la suite. j'en déduis que sa doi etre a ce niveau du premier for que cela bug non ?
donaldalex2001
  
   
      ?   @     Posté le 08/12/2007 15:14:01  
Voter pour ce message
j'ai résolu access violation
dans sa il n'y a rien qui vous choque :sol: (je fais mon fier mais j'ai galérer!!) ?
for (i=1;i<=6;i++)
{
for (j=1;j<=7;i++)
grille[j]='$';
}


Dans le deuxième "for", l'incrémentation se fait avec j au lieu de i. d'ou l'access violation... :youpi: ce n'es pas tout maintenant que j'ai sa j'ai un second souci apres avoir entrer le premier nom de joueur puis entrer ...paf je tombe sur une boucle infinie...je crois qu'il doit se passer quelquechose au niveau du "scan" du prenom mais je sais pas quoi ...AU secours!!!!
ps: merci encore beaucoup pour votre aide :love:

ps voici le prog (encore une fois) j'ai modif quelques trucs et rajouter une fonction qui affiche le tableau

#include <conio.h>
#include <stdio.h>

void dessine_grille(char grille[6][7])
{ int i,j;

for (i = 1 ; i <= 6 ; i++)
{
for (j= 1 ; j <= 7 ; j++)
printf("%c ", grille[j]);
printf("\n");
}printf("1 2 3 4 5 6 7\n");
}

void main (void)
{
char grille[6][7];
int nb_p,i,j,x,c,n;
char ja,jb,pa,pb,v;

//début du prog
//initialisation du tableau
for (i=1;i<=6;i++)
{
for (j=1;j<=7;j++)
grille[j]='z';
}
dessine_grille(grille);
// initialisation des variables

pa='c' ;
pb='d' ;
nb_p=0 ;
v='o';
n=0;

// saisit du nom des joueurs

printf ("nom joueur 1\n");
scanf ("%c\n",&ja);
printf ("nom joueur 2\n");
scanf ("%c\n",&jb);

do //do d'une super boucle
{
x=0;
do //do1
{
do
{
printf ("%c dans quel colonne désirez vous jouer", &ja);
scanf ("%i",&c);
}
while ((c<1) && (c>7));

if (grille[1][c]=='z')
{
grille[1][c]=pa;
x=1;
}
else
{
if (grille[2][c]=='z')
{
grille[2][c]=pa;
x=2;
}
else
{ if (grille[3][c]=='z')
{
grille[3][c]=pa;
x=3;
}
else
{ if (grille[4][c]=='z')
{
grille[4][c]=pa;
x=4;
}
else
{ if (grille[5][c]=='z')
{
grille[5][c]=pa;
x=5;
}
else
{ if (grille[6][c]=='z')
{
grille[6][c]=pa;
x=6;
}
else
{printf ("la colonne est pleine");
}

}
}
}
}
}
}
while (x==0);//fin do1

// test pour voir si le joueur a gagné

//test horizontal vers la droite

for( j=c;j=c+3;j++)
{
while (grille[x][j]==pa){nb_p=nb_p+1;}
;}

//test horizontal vers la gauche
for( j=c;j=c-3;j--)
{
while (grille[x][j]==pa){nb_p=nb_p+1;}
;}

if (nb_p>=4) {v=ja;}// test première diagonale
else
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à droite
{
for (j=j+1;;)
{while (grille[j]==pa) {nb_p=nb_p+1;}
}
}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à gauche
{
for (j=j-1;;)
{while (grille[j]==pa) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=ja;}
else // test seconde diagonale
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à gauche
{
for (j=j-1;;)
{while (grille[j]==pa) {nb_p=nb_p+1;}
;}
;}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à droite
{
for (j=j+1;;)
{while (grille[j]==pa) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=ja;}
else
{ nb_p=0;
for (i=x;i=x-3;i--)
{while(grille[c]==pa) {nb_p=nb_p+1;}
}
if (nb_p>=4) {v=ja;}
;}
;}
;}
if(v=='o'){x=0;}
//début second joueur
do //do1
{
do
{
printf ("%c dans quel colonne désirez vous jouer", &jb);
scanf ("%i",&c);
}
while ((c<1) && (c>7));

if (grille[1][c]=='z')
{
grille[1][c]=pb;
x=1;
}
else
{
if (grille[2][c]=='z')
{
grille[2][c]=pb;
x=2;
}
else
{ if (grille[3][c]=='z')
{
grille[3][c]=pb;
x=3;
}
else
{ if (grille[4][c]=='z')
{
grille[4][c]=pb;
x=4;
}
else
{ if (grille[5][c]=='z')
{
grille[5][c]=pb;
x=5;
}
else
{ if (grille[6][c]=='z')
{
grille[6][c]=pb;
x=6;
}
else
{printf ("la colonne est pleine");
}

}
}
}
}
}
}
while (x==0);//fin do1

// test pour voir si le joueur a gagné

//test horizontal vers la droite

for( j=c;j=c+3;j++)
{
while (grille[x][j]==pb){nb_p=nb_p+1;};
}

//test horizontal vers la droite
for( j=c;j=c-3;j--)
{
while (grille[x][j]==pb){nb_p=nb_p+1;};
}

if
(nb_p>=4) {v=jb;}
// test première diagonale
else
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à droite
{
for (j=j+1;;)
{while (grille[j]==pb) {nb_p=nb_p+1;}
}
}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à gauche
{
for (j=j-1;;)
{while (grille[j]==pb) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=jb;}
else // test seconde diagonale
{
nb_p=1;
j=c;
for (i=x+1;i=x+3;i++) //test en haut à gauche
{
for (j=j-1;;)
{while (grille[j]==pb) {nb_p=nb_p+1;}
;}
;}
j=c;
for (i=x-1;i=x-3;i--) //test en bas à droite
{
for (j=j+1;;)
{while (grille[j]==pb) {nb_p=nb_p+1;}
;}
;}

if (nb_p>=4) {v=jb;}
else
{ nb_p=0;
for (i=x;i=x-3;i--)
{while(grille[c]==pb) {nb_p=nb_p+1;}
}
if (nb_p>=4) {v=jb;}
;}
;}
;}

for (i=1;i=6;i++)
{
for (j=1;j=6;j++)
{
if (grille[j]!='z') {n=n+1;}
;}
;}

if (n==42) {v='e';}
;}
while ((v=='o') && (v!='e')); // condition de répétition de la grande boucle

if ((v==ja) || (v==jb)) { printf ("BRAVO C'EST %c qui à gagner ",&v);}
else {printf ("partie impossible");}

getch ();
}



-->Message édité par donaldalex2001 le 08/12/2007 15:41:01<--
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> Aide en langage C PUISSANCE 4 -boucle infinie-

Aller à :

Page générée en : 0.081s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Partage de fichiers
Partagez vos gros fichiers entre amis, de façon totalement confidentielle et sécurisée.
Conseils
Découvrez plus de 300 astuces pour Windows (XP et Vista) et vos logiciels préférés