Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/12/2012, 17h53   #1
Cannot
Invité de passage
 
Rémi Cannot
Prépa
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Rémi Cannot

Informations professionnelles :
Activité : Prépa

Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 3
Points : 3
Par défaut Bataille navale qui seg fault

Bonjour,

J'ai finis un projet d'informatique, la bataille navale, il ne me reste plus qu'à faire une meilleure présentation du jeu.
Mon soucis c'est que lorsque je commence à entrer les coordonnées des placements des tirs, un message d'erreur de WINDOWS s'affiche, alors que je le compilateur indique aucun erreur.

Voici le code (ne faites pas aux erreurs d'orthographe dans les commentaires ^^) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
/*
Algo : Bataille navale
Derniere modification : 22/12/12
*/
 
 
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
 
 
const int NBJoueurs = 2, NBLignes = 5, NBBateaux = 4, LongNom = 12, NBColonne = 5;
const int INIT = -1, BATEAU = 1, tir = 2, coule = 3;
 
 
void saisirlesNoms (char n[NBJoueurs][LongNom]);
void afficherlesNoms (char n[NBJoueurs][LongNom]);
void initialisertableau (int t[NBJoueurs] [NBLignes] [NBColonne]);
void initialiserBateau (int t[NBJoueurs] [NBLignes] [NBColonne]);
void affPlateau(int t[NBJoueurs] [NBLignes] [NBColonne], int numj);
void affTir(int t[NBJoueurs] [NBLignes] [NBColonne],int tj[NBJoueurs] [NBLignes] [NBColonne], int numj);
bool fTesterFinJeu(int tj[NBJoueurs] [NBLignes] [NBColonne],int numjoueur);
int fJoueurSuivant(int numj);
 
 
int main()
{
 
    char nom[NBJoueurs][LongNom]; // mémorisation des noms
    int plateau[NBJoueurs] [NBLignes] [NBColonne]; // plateau de jeu
    int tir[NBJoueurs] [NBLignes] [NBColonne]; // plateau des tirs
 
    int numjoueur; // numero du joueur actuel
    int reponse; // saisie pour poursuite du jeu
 
    bool jeuPasTermine;
 
    /* INITIALISATION */
 
    saisirlesNoms(nom);
    afficherlesNoms(nom);
 
    do {
 
        initialisertableau(plateau); // raz du plateau
        initialiserBateau(plateau); // saisir les bateau
        initialisertableau(tir); // raz des tirs
 
        jeuPasTermine = true;
 
        numjoueur = 0;
 
        while (jeuPasTermine) {
            system("cls");
            // rechercher le joueur suivant
            numjoueur = fJoueurSuivant(numjoueur);
            printf("\n%s",nom[numjoueur]);
 
            // afficher les plateau de jeu et de tir
            affPlateau(plateau, numjoueur);
            printf("\nTirs :");
            affPlateau(tir, numjoueur);
 
            // demander la saisie du tir
            // demander un numero de ligne et de colonne
             // mémoriser ce tir dans le tableau de tir du joueur
             affTir(tir,plateau, numjoueur);
 
            // tester si c'est la fin du jeu
             jeuPasTermine = fTesterFinJeu(plateau, numjoueur);
 
        }
 
        printf("\nla gagnant : %s",nom[numjoueur]);
 
       printf("continuer ? 1=oui; 0=non");
        scanf("%d",&reponse);
     } while (reponse==1);
 
    return 0;
}
 
 
void saisirlesNoms (char n[NBJoueurs][LongNom]) {
    int i;
    for(i=0;i<NBJoueurs;i++) {
        printf("Saisir un nom : ");
        scanf("%s",n[i]);
    }
}
 
void afficherlesNoms (char n[NBJoueurs][LongNom]) {
    int i;
    for(i=0;i<NBJoueurs;i++) {
        printf("\nnom joueur %d est %s ",i+1,n[i]);
    }
}
 
void initialisertableau (int t[NBJoueurs] [NBLignes] [NBColonne]) {
   int i;
   int j;
   int k;
 
 
   for(i=0;i<NBJoueurs;i++) {
       for (j=0;j<NBLignes;j++) {
          for (k=0;k<NBColonne;k++) {
           t[i][j][k] = INIT;
          }
       }
   }
  }
 
void initialiserBateau (int t[NBJoueurs] [NBLignes] [NBColonne]) {
   int i;
   int j;
   int x;
   int y;
 
   for(i=0;i<NBJoueurs;i++) {
       printf("\njoueur %d :",i);
       for (j=0;j<NBBateaux;j++)
       {
           printf("\nSaisir les coordonnes x y du bateau");
           scanf("%d %d",&x,&y);
           t[i][x][y] = BATEAU;
           }
        affPlateau(t, i);
        }
}
 
 
 
void affPlateau(int t[NBJoueurs] [NBLignes] [NBColonne], int numj) {
    int j,k;
      for (j=0;j<NBLignes;j++) {
        printf("\n");
          for (k=0;k<NBColonne;k++) {
              printf("! ");
              if (t[numj][j][k] == INIT)
                 printf(".");
                else if (t[numj][j][k] == BATEAU )
                    printf("B");
                else if (t[numj][j][k] == tir )
                    printf("T");
                else if (t[numj][j][k] == coule )
                    printf("C");
                printf(" ");
          }
          printf("!");
          printf("\n");
          for(k=1;k<=NBColonne;k++)
            printf("----");
      }
}
 
void affTir(int t[NBJoueurs] [NBLignes] [NBColonne], int tj[NBJoueurs] [NBLignes] [NBColonne], int numj) {
   int j,k;
   int x;
   int y;
 
           printf("\nSaisir les coordonnes x y du tir");
           scanf("%d %d",&x,&y);
           t[numj][x][y] = tir;
 
           if(tj[fJoueurSuivant(numj)][x][y]==BATEAU) {
                printf("coule en %d %d",x,y);
                tj[fJoueurSuivant(numj)][x][y]=coule;
           }
//           }
//        affTir(t, i);
//        }
      for (j=0;j<NBLignes;j++) {
        printf("\n");
          for (k=0;k<NBColonne;k++) {
              if (t[numj][j][k] == INIT)
                 printf(".");
                else if (t[numj][j][k] == tir)
                    printf("T");
          }
      }
}
 
int fJoueurSuivant(int numj) {
    if (numj==0) return 1;
    else return 0;
}
 
/*
Si un joueur a tous ses bateaux coulés alors jeu pasterminé = faux
 
la fonction attend/reçoit
- un plateau
- le numero du joueur qui a joué
 
Elle va compter le nombre de bateaux du joueur suivant
 
si le nombre de batreau est à 0, elle retourne faux (fin du jeu) sinon vrai
 
 
*/
bool fTesterFinJeu(int tj[NBJoueurs] [NBLignes] [NBColonne],int numjoueur) {
    // compter le nombre de bateaux du joueur qui suit
    int ct=0,i,j, x,y;
     for (i=0;i<NBLignes;i++) {
        for (j=0;j<NBColonne; j++ ) {
          if (tj[fJoueurSuivant(numjoueur)][x][y]==BATEAU) ct=ct+1;
        }
     }
     if (ct==0) {
       return false;
     }
    else {
       return true;
     }
}
Merci beaucoup
Cannot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 18h31   #2
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 488
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 488
Points : 13 125
Points : 13 125
Citation:
un message d'erreur de WINDOWS s'affiche,
Il dit quelque chose ce message, ce peut être utile de savoir quoi.
__________________
Publication : Concepts en C

Mon avatar : Glenn Gould

--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 22/12/2012, 19h15   #3
Cannot
Invité de passage
 
Rémi Cannot
Prépa
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Rémi Cannot

Informations professionnelles :
Activité : Prépa

Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 3
Points : 3
bataille.exe a cessé de fonctionné.
Le programme a cessé de fonctionné.


Juste ça
Cannot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 19h21   #4
Sve@r
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 533
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 45
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 533
Points : 7 066
Points : 7 066
Citation:
Envoyé par Cannot Voir le message
Bonjour,

...
Mon soucis c'est que lorsque je commence à entrer les coordonnées des placements des tirs, un message d'erreur de WINDOWS s'affiche, alors que je le compilateur indique aucun erreur.
Salut

Un programme qui se compile n'est pas un programme exempt d'erreur. Le compilo te dit juste que ta syntaxe est correcte est que l'édition des liens entre les différents fonctions se fait aussi. En revanche il ne peut pas détecter les erreurs de logique et de gestion mémoire...

Exemple de programme qui compile mais qui risque fortement d'avoir lui-aussi un message un jour...
Code c :
1
2
3
4
5
6
7
8
int main()
{
    char toto[1]="Hello";
    int i;
 
    for (i=-5; i < 15; i++)
        printf("toto[%d]=%c\n", i, toto[i]);
}

Citation:
Envoyé par diogene Voir le message
Il dit quelque chose ce message, ce peut être utile de savoir quoi.
+1...

Citation:
Envoyé par Cannot Voir le message
bataille.exe a cessé de fonctionné.
Le programme a cessé de fonctionné.


Juste ça
[edit]
Bon ben commence à mettre des printf() un peu partout, notamment dans la fonction qui semble incriminée (la saisie des navires semble-t-il...)
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 19h26   #5
gl
Rédacteur/Modérateur
 
Homme
Inscription : juin 2002
Messages : 2 036
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 2 036
Points : 4 027
Points : 4 027
Dans la fonction fTesterFinJeu, les variables x et y ne sont jamais initialisés, tu vas donc lire n'importe où en mémoire (je soupçonne un mélange entre i,j et x,y dans cette fonction).

Mais un compilateur correctement réglé (i.e. avec les warnings activés) l'indique :

Citation:
C:\data\Workspace\C\DVP\main.c||In function 'main'
C:\data\Workspace\C\DVP\main.c|32|warning: declaration of 'tir' shadows a global declaration [-Wshadow]|
C:\data\Workspace\C\DVP\main.c|14|warning: shadowed declaration is here [-Wshadow]|
C:\data\Workspace\C\DVP\main.c||In function 'fTesterFinJeu'
C:\data\Workspace\C\DVP\main.c|208|warning: 'x' may be used uninitialized in this function [-Wuninitialized]|
C:\data\Workspace\C\DVP\main.c|208|warning: 'y' may be used uninitialized in this function [-Wuninitialized]|
||=== Build finished: 0 errors, 4 warnings (0 minutes, 2 seconds) ===|
gl est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/12/2012, 11h25   #6
Kirilenko
Membre émérite
 
Avatar de Kirilenko
 
Homme Lucas Pesenti
Étudiant
Inscription : décembre 2011
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Lucas Pesenti
Âge : 16
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 234
Points : 858
Points : 858
Envoyer un message via MSN à Kirilenko
Bonjour,

À force d'utiliser les VLA, tu vas faire exploser ta pile.
De plus, quand je tourne ton code sur un débogueur, j'ai des variables qui ne sont pas initialisées. Fais de même, tu verras que ton programme sera plus simple à corriger.

Bonne journée.
__________________
Récursivité en C : épidémie ou hérésie ?

"Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman
Kirilenko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 11h47   #7
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 490
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 490
Points : 32 264
Points : 32 264
Envoyer un message via MSN à Médinoc
^Normalement, il n'y a pas de VLAs ici, ou du moins il ne devrait pas y en avoir. Malheureusement je ne sais plus comment les variables constantes connues à la compilation marchent en C99 (par opposition au C++), donc si ça se trouve ce sont des VLAs quand même.

À propos de x et y: La plus grosse erreur est de les utiliser directement après une entrée pour indexer un tableau, sans validation d'aucune sorte: Commence par vérifier qu'ils sont OK:
Code C :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* Lit jusqu'au \n inclus */
int fpurge(FILE *pfIn)
{
	int c;
	while((c=fgetc(pfIn))!='\n' && c!=EOF)
	{ }
	return (c==EOF ? -1 : 0);
}
 
void affTir(int t[NBJoueurs] [NBLignes] [NBColonne], int tj[NBJoueurs] [NBLignes] [NBColonne], int numj) {
	int j,k;
	int x;
	int y;
	do {
		int resScanf;
		printf("\nSaisir les coordonnes x y du tir");
		resScanf = scanf("%d %d", &x, &y);
		fpurge(stdin);
	} while(resScanf!=2 || !(x>=0 && x<NBLignes) || !(y>=0 && y<NBColonne));
	...
Note pour moi-même: J'ai récupérer fpurge de ce post.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 11h58   #8
Kirilenko
Membre émérite
 
Avatar de Kirilenko
 
Homme Lucas Pesenti
Étudiant
Inscription : décembre 2011
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Lucas Pesenti
Âge : 16
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 234
Points : 858
Points : 858
Envoyer un message via MSN à Kirilenko
Bonjour,

Citation:
Envoyé par Médinoc Voir le message
^Normalement, il n'y a pas de VLAs ici, ou du moins il ne devrait pas y en avoir. Malheureusement je ne sais plus comment les variables constantes connues à la compilation marchent en C99 (par opposition au C++), donc si ça se trouve ce sont des VLAs quand même.
Le qualificateur const du C n'est pas typé de la même manière qu'en C++ (en ce sens, il n'a pas la même sémantique). La taille d'un tableau doit être spécifiée à partir d'une constante entière, mais le fait est que const est mal nommé : il ne conduit pas à une variable constante à proprement dit (on pourrait l'apparenter à une lecture seule, mais évaluée au runtime). Un tel tableau est donc bien un VLA en C (*). C'est aussi pourquoi on utilise cette technique beaucoup moins souvent qu'en C++.

Bonne journée.

(*) : Enfin, c'est principalement de la théorie. Il me semble qu'il existe certaines extensions (mais alors ça devient un mix dégueulasse entre C et C++) qui autorisent l'utilisation des const int en tant que taille de tableau, tout en ne supportant que le C89 (c'est le cas de VS2008).
__________________
Récursivité en C : épidémie ou hérésie ?

"Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman
Kirilenko est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/12/2012, 12h15   #9
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 490
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 490
Points : 32 264
Points : 32 264
Envoyer un message via MSN à Médinoc
Dans ce cas, la meilleure chose à faire pour être sûr que ce ne soit pas des VLA, c'est remplacer toutes ces variables const par des #define?
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 12h19   #10
Kirilenko
Membre émérite
 
Avatar de Kirilenko
 
Homme Lucas Pesenti
Étudiant
Inscription : décembre 2011
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Lucas Pesenti
Âge : 16
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 234
Points : 858
Points : 858
Envoyer un message via MSN à Kirilenko
Citation:
Envoyé par Médinoc Voir le message
Dans ce cas, la meilleure chose à faire pour être sûr que ce ne soit pas des VLA, c'est remplacer toutes ces variables const par des #define?
Tout à fait. Simplement, j'aurais tendance à conseiller davantage les énumérations quand il s'agit de constantes numériques (sauf si on veut faire du préprocesseur dessus), mais, dans l'ensemble, c'est effectivement ce que je cherchais implicitement à dire dans mon premier message.
__________________
Récursivité en C : épidémie ou hérésie ?

"Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman
Kirilenko est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/12/2012, 12h51   #11
Cannot
Invité de passage
 
Rémi Cannot
Prépa
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Rémi Cannot

Informations professionnelles :
Activité : Prépa

Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 3
Points : 3
Oui j'ai corrigé ça, donc plus de bug, merci.

Mais maintenant j'ai déceler un autre problème, le compteur "ct" de ma fonction suivante ne marche pas, donc si je place seulement un bateau, pas de soucis, le jeu se termine si ce-dernier a été coulé, mais si je passe à 2 bateaux, il me suffit que je coule un bateau pour que le jeu s'arrête, donc sa retourne vrai :

Voici le problème :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool fTesterFinJeu(int tj[NBJoueurs] [NBLignes] [NBColonne],int numjoueur) {
    // compter le nombre de bateaux du joueur qui suit
    int ct=0,i,j;
    int x = 0, y = 0;
     for (i=0;i<NBLignes;i++) {
        for (j=0;j<NBColonne; j++ ) {
          if (tj[fJoueurSuivant(numjoueur)][x][y]==BATEAU) {
              ct=ct+1;
              }
        }
     }
     if (ct==NBBateaux) {
       return true;
     }
    else {
       return false;
     }
}
Cannot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 16h03   #12
Cannot
Invité de passage
 
Rémi Cannot
Prépa
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Rémi Cannot

Informations professionnelles :
Activité : Prépa

Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 3
Points : 3
Ce n'est pas la fonction booléenne qui ne marche pas, car j'ai étudié une autre possibilité de tester le jeu est toujours le même soucis
Voici l'autre possibilité (en commentaire l'ancienne méthode) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool fTesterFinJeu(int tj[NBJoueurs] [NBLignes] [NBColonne],int numj) {
    // compter le nombre de bateaux du joueur qui suit
  /*  int ct=0,i,j;
    int x = 0, y = 0;
     for (i=0;i<NBLignes;i++) {
        for (j=0;j<NBColonne; j++ ) {
          if (tj[fJoueurSuivant(numj)][x][y]==BATEAU) {
              ct=ct+1;
              }
 
     }*/
     int batcoul = 0;
     int x = 0, y=0;
     if(tj[fJoueurSuivant(numj)][x][y]==BATEAU) {
                     batcoul = 1 + batcoul; }
     if (batcoul==NBBateaux) {
       return true; }
 
       else {
       return false;
     }
  }
Par contre j'inverse true et false, là il se passe quelque chose qui semble logique puisque la boucle de la fonction principale devient infinie, donc je ne sais vraiment pas d'où vient le problème.
Cannot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 16h05   #13
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 488
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 488
Points : 13 125
Points : 13 125
Tu as bien initialisé les variables x et y dans cette fonction, mais tu n'en as pas profité pour regarder à quoi elles servaient !
En fait, elle restent à 0 et cette ligne est plus que suspecte
Code :
if (tj[fJoueurSuivant(numjoueur)][x][y]==BATEAU) {
__________________
Publication : Concepts en C

Mon avatar : Glenn Gould

--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/12/2012, 16h18   #14
Cannot
Invité de passage
 
Rémi Cannot
Prépa
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Rémi Cannot

Informations professionnelles :
Activité : Prépa

Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 3
Points : 3
J'ai mis
Code :
if (tj[fJoueurSuivant(numj)][i][j]==BATEAU)
Mais toujours le même soucis, malgré d'autres essais
Cannot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 17h35   #15
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 488
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 488
Points : 13 125
Points : 13 125
Code :
jeuPasTermine = fTesterFinJeu(plateau, numjoueur);
Alors que la fonction renvoie 'jeuTermine'
__________________
Publication : Concepts en C

Mon avatar : Glenn Gould

--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 17h48   #16
Cannot
Invité de passage
 
Rémi Cannot
Prépa
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Rémi Cannot

Informations professionnelles :
Activité : Prépa

Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 3
Points : 3
Si fTesterFinJeu retourne vrai alors jeuPasTermine retourne vrai
Cannot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2012, 18h19   #17
Cannot
Invité de passage
 
Rémi Cannot
Prépa
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations personnelles :
Nom : Rémi Cannot

Informations professionnelles :
Activité : Prépa

Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 3
Points : 3
Ouf' j'ai réussi tout fonctionne !!!

J'ai repris une sauvegarde de ma bataille d'il y a une semaine, et en partant de vos indications (en remplaçant X Y par I J et en initialisant), juste ça ^^
En fait, depuis ce matin je changais mon code à chaque fois en faisant des tests et je devais travailler sur des erreurs ...

Merci !
J'ai enfin fini, il ne reste plus qu'à faire la forme.


Bonnes fêtes ! , j'aurai peut-être encore besoin de votre aide, j'ai encore un second projet avec un démineur .
Cannot est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h22.


 
 
 
 
Partenaires

Hébergement Web