[C] donner valeurs à un tableau après déclara

Résolu
SofLS Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
SofLS Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Comme (presque) dit dans le titre, j'ai un problème pour affecter des valeurs à un tableau à deux dimensions après avoir déclaré mon tableau (il faut absolument que j'affecte après déclaration puisque je compte utiliser cette structure :
struct Jeu
{
tab Nombre;
tab Solution;
};


où tab est :
typedef int tab[10][10];

Pour info, ça marche niquel quand je déclare et affecte en même temps :
tab tab1={{4,6,3,1,1,1,8,9,4,6},{3,7,8,9,6,4,6,2,5,1},{3,2,5,8,7,3,9,6,7,5},{2,8,4,1,7,8,8,3,9,6},{1,5,6,2,4,9,3,1,8,5},{6,9,8,5,4,2,7,1,3,8},{8,4,9,6,9,1,8,5,9,2},{4,1,2,9,5,7,1,9,6,3},{7,3,4,4,9,3,6,8,5,6},{6,7,7,3,9,5,4,1,1,9}};

J'ai fait plusieurs tests mais je n'ai que des erreurs (certains tests sont vraiment stupide mais je commence à desesperer!^^) :
tab tab2;
tab2={{1,0,0,1,0,1,0,0,0,1},{0,0,0,0,0,0,1,0,1,0},{1,0,1,0,1,0,0,0,0,0},{0,1,0,0,0,0,1,0,0,0},{0,0,0,0,1,0,0,1,0,1},{1,0,1,0,0,0,0,0,0,0},{0,0,0,0,1,0,1,0,1,0},{0,1,0,1,0,0,0,1,0,0},{0,0,1,0,0,1,0,0,0,1},{0,1,0,0,1,0,0,1,0,0}};

tab tab4;
tab4[10][10]={{1,0,0,1,0,1,0,0,0,1},{0,0,0,0,0,0,1,0,1,0},{1,0,1,0,1,0,0,0,0,0},{0,1,0,0,0,0,1,0,0,0},{0,0,0,0,1,0,0,1,0,1},{1,0,1,0,0,0,0,0,0,0},{0,0,0,0,1,0,1,0,1,0},{0,1,0,1,0,0,0,1,0,0},{0,0,1,0,0,1,0,0,0,1},{0,1,0,0,1,0,0,1,0,0}};

tab tab5;
tab5[]={{1,0,0,1,0,1,0,0,0,1},{0,0,0,0,0,0,1,0,1,0},{1,0,1,0,1,0,0,0,0,0},{0,1,0,0,0,0,1,0,0,0},{0,0,0,0,1,0,0,1,0,1},{1,0,1,0,0,0,0,0,0,0},{0,0,0,0,1,0,1,0,1,0},{0,1,0,1,0,0,0,1,0,0},{0,0,1,0,0,1,0,0,0,1},{0,1,0,0,1,0,0,1,0,0}};

tab tab6;
tab6[][]={{1,0,0,1,0,1,0,0,0,1},{0,0,0,0,0,0,1,0,1,0},{1,0,1,0,1,0,0,0,0,0},{0,1,0,0,0,0,1,0,0,0},{0,0,0,0,1,0,0,1,0,1},{1,0,1,0,0,0,0,0,0,0},{0,0,0,0,1,0,1,0,1,0},{0,1,0,1,0,0,0,1,0,0},{0,0,1,0,0,1,0,0,0,1},{0,1,0,0,1,0,0,1,0,0}};

tab tab7;
tab7[10][]={{1,0,0,1,0,1,0,0,0,1},{0,0,0,0,0,0,1,0,1,0},{1,0,1,0,1,0,0,0,0,0},{0,1,0,0,0,0,1,0,0,0},{0,0,0,0,1,0,0,1,0,1},{1,0,1,0,0,0,0,0,0,0},{0,0,0,0,1,0,1,0,1,0},{0,1,0,1,0,0,0,1,0,0},{0,0,1,0,0,1,0,0,0,1},{0,1,0,0,1,0,0,1,0,0}};

les erreurs sont toutes "expected expression before ']' token" , sauf pour tab4 où c'est '}'.

Quelqu'un peut-il m'aider?
A voir également:

10 réponses

arkos78 Messages postés 618 Date d'inscription   Statut Membre Dernière intervention   48
 
bonjour c très mauvais de remplir un tableau comme çela voit une autre méthode
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
essai :
const tab T1={...};
tab T2 = (tab){...};
int T3[10][10]=(int**){...};
const int T4[10][10]={...};// Celui là, au moins devrais fonctionné.
0
SofLS Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Wouah ! Quelle rapidité!^^

Pourquoi c'est mauvais?

Je ne voies pas comment faire autrement, il n'y a aucune logique dans l'affectation des nombre du tableau, c'est une grille de jeu.
je peux pas faire un truc du genre :
for i
for j
tab1[i][j]=?

A moins qu'il y ai une méthode que je ne connaisse pas?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Si les tableau ne sont pas amener à changer, c'est une méthode que je ne trouve pas mauvaise.
Par contre, défini tes tableau comme étant constant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SofLS Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
J'avais pas vu ta réponse Char Sniper,
j'ai testé 1,2 et 4 marchent.

En effet mes tableaux ne changeront pas, mais dans ce cas, il faut que je les définisse avec le type struct Jeu
const struct Jeu T1.Nombre={...} ne marche pas.
D'ailleurs il faudrait peut-être affecter des valeurs à Nombre et Solution en même temsp?
0
SofLS Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai réussi!

Pour ceux que ça interesse, il suffit de faire :
const struct Jeu T1={ {...}, {...} };

Merci pour votre aide!
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je pense que c'est bon, mais c'est assez dangereux comme manière de faire !
As tu compris pourquoi ça fonctionnait ?
Si ce n'est pas le cas, ça me parait extremement dangereux ce que tu fais.
T1 est un tableau à trois dimension en fait.
0
SofLS Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Oui, j'ai compris... a moins qu'il y ait une astuce?

En fait ce que je ne comprends pas c'est pourquoi la déclaration de tab2 ne marche pas.

C'est vrai, T1 est un tab à 3 dimensions, j'avais pas vu! En même temps, je vais rajouter des choses dans ma structure plus tard.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
à ce sujet, je te conseil de lire le chapitre7 (du moins le début) de ce livre :
https://beuss.developpez.com/tutoriels/pcasm/#LS1
Il m'a fait comprendre la nature des structures, et je pense qu'il t'aidera.
En revanche pour les histoires de tableau, c'est un peu plus compliqué, je n'ai pas de source. Mais j'ai eu plein de discussion sur ce forum qui en traitait.
En résumé (même si ça ne t'aide pas beaucoup) un tableau n'est pas un pointeur, mais peux se comporté comme tel dans certains cas particuliers, il se raproche du int*const (c'est le pointeur qui est constant et non la valeur pointé).
Lorsque tu utilise met {...} cela correspond en fait à un tableau constant de valeurs constantes ! Il faut donc faire attention à ce qu'on fait avec.
Par exemple, tu peux affecter ce tableau à un pointeur grâce au transtypage :
int* C;
C=(int*){1,2,3};
par contre, attention à ne pas faire de free sur C à ce moment là, ça causerai une erreur !
{1,2,3} est de type (int const * const).
0
SofLS Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup pour le lien, le document est très interessant; et merci pour toutes tes explications!
0