C : Envoi et retour d'un tableau dans des fonctions. - C - Programmation
Marsh Posté le 15-04-2016 à 18:31:48
Bonjour !
Les tableaux à deux dimensions sont toujours un peu problématiques à gérer et à passer, en effet, car cela dépend de la façon dont vous l'allouez (soit int **toto, soit int * toto[], soit int toto[][], même si, de mémoire, les deux dernières sont équivalentes (pas taper si je me trompe ).
Le plus simple, si vous voulez vraiment travailler en C, est d'utiliser un tableau simple, dans lequel vous rangez les données ligne par ligne (ou colonne par colonne, c'est votre choix )
Au lieu d'utiliser tab2D[x][y] vous utilisez tab1D[x+nX*y] où nX est le nombre de colonnes (marche aussi avec tab1D[y+nY*x] en utilisant le nombre de lignes, l'important est d'être cohérent).
Bonne continuation !
Marsh Posté le 15-04-2016 à 18:35:10
Le problème ce que je ne peux pas me passer des deux dimensions ici et que chaque fois que je tente de changer la syntaxe, cela a des répercussions hasardeuses que je ne sais pas gérer.
Marsh Posté le 15-04-2016 à 18:39:43
Je conteste : vous pouvez vous passer de la deuxième dimension : il faut juste faire les ajustements nécessaires.
Au pire, faites deux fonctions : int getElement(vecteur, x, y) et void setElement(vecteur, x, y, valeur) pour les accès, et cela sera nettement plus simple à manipuler (et plus facile à modifier par la suite si nécessaire).
Bonne continuation !
Marsh Posté le 15-04-2016 à 18:42:47
Navré, mais ce n'est pas spécialement un choix personnel. C'est un travail imposé avec quelques conditions.
Marsh Posté le 15-04-2016 à 19:37:36
J'ai pas regardé le code en détail, ci-joint un exemple pour les tableaux. Le secret si on peut dire c'est qu'il faut indiquer les dimensions (de préférence avec des #define pour que ça reste cohérent en cas de changement).
Code :
|
edit: Se passer de la deuxième dimension c'est un mauvais bricolage pour ceux qui ne savent pas faire, à éviter. Si le language C permets des tableaux à plusieurs dimensions alors autant s'en servir si ça a du sens!
edit2: Une fonction qui ne retourne rien (Plateau()) doit être déclarée void Plateau(...), sinon le compilateur va râler "warning: control reaches end of non-void function [-Wreturn-type]".
Et le goto c'est moche.
Code :
|
Marsh Posté le 15-04-2016 à 18:22:10
Bonjour à tous, ça fait 3 heures que j'erre sur le net pour trouver une réponse à mon problème, mais devant 6 alternatives différentes qui ne répondent jamais correctement à mes besoins, je me tourne vers vous.
Je suis en train de coder un sudoku, et j'ai besoin de faire passer une grille initialisée à 0 (un tableau bi dimensionnel en somme) en paramètre à une fonction qui va la remplir avec des nombres. Mais, j'ai de monstrueux problème de syntaxe, je ne sais pas comment gérer tableaux et fonctions ensemble ainsi que le retour.
Voici mon code :
Message édité par laenthis le 15-04-2016 à 18:35:49