Passage en paramètre d'un tableau

misterbobo Messages postés 2 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 10 avril 2009 - 10 avril 2009 à 18:20
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 11 avril 2009 à 00:50
Bonjour, j'ai à programmer la fonction nouvelle génération d'un jeu de la vie dont les paramètres en entrés sont imposés. Je pense être arrivé à quelque chose d'assez correct mais je ne comprend pas pourquoi il ne peut pas compiler "Grille [i][j]". J'ai été voir les tutoriels, je ne vois pas mon erreur et je ne peux pas utiliser de pointeur sur Grille (imposé par l'énoncé). Merci de m'aider.

void JeuDeLaVie(unsigned char Grille[][], unsigned short int Dim, unsigned short int NbEtats){
int i, j, k, compteur, boucle;
for (boucle=0; boucle<NbEtats; boucle++) {
    for (i=0;i<Dim+1;i++){
        for (j=0;j<Dim+1;j++){
            if (Grille[i][j] == '*'){
            compteur = 0;
                for (k=i-1;i 3) || (compteur -1 < 2)) {
                Grille[i][j] = ' ';
                }
                if (compteur -1 == 3) {
                Grille[i][j] = '*';
                }
            }          
            if (Grille[i][j] == ' '){
            compteur = 0;
                for (k=i-1;i

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 avril 2009 à 19:45
Plusieurs erreurs:

> Unsigned char Grille[][]
Impossible, tu ne peux pas passer un tableau statique à double dimension, sans préciser au moins la deuxième dimension. En revanche, tu as le droit d'écrire: Unsigned char** Grille.

A noter que "Unsigned char** Grille" n'est pas tout à fait équivalent à "Unsigned char Grille[][]".

> for (i = 0; i < Dim + 1; i++)
Ca me semble étrange, mais n'ayant pas le reste du code, je ne sais pas si c'est correcte ou non.

> for (k = i - 1; i < i + 2; k++)
Ca c'est "space". Sachant que K commence à -1, alors cette condition sera toujours vraie, donc boucle infinie. i < i + 2, peut être simplifié en : 0 < 2. Surtout que i n'est jamais modifié...

Aprend à découper ton code en petites fonctions, tout faire d'une seule traite, c'est moche, inmaintenable, et conduis souvent à des erreurs. Quant au placement des accolades, je ne suis pas fan, mais ça c'est un choix tout à fait personnel.
0
misterbobo Messages postés 2 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 10 avril 2009
10 avril 2009 à 20:10
Merci de ta reponse, justement j'aimerais pouvoir utiliser **Grille mais l'énoncé donne la premiere ligne : « void JeuDeLaVie(unsigned char Grille[][], unsigned
short int Dim, unsigned short int NbEtats) ».

Merci également d'avoir regarder le reste du programme en effet il y avait des boucles infinies suite à un mauvais copier-coller (k=i-1,k
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
11 avril 2009 à 00:50
void JeuDeLaVie(unsigned char Grille[][])
{
}

int main(void)
{
  return 0;
}

Compiler avec: gcc -W -Wall -ansi -pedantic test.c
est.c:1: erreur: les éléments du tableau sont de type incomplet
test.c:1: attention : unused parameter ‘Grille’

L'énoncé, doit être erroné, ce n'est juste pas possible.
0
Rejoignez-nous