[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 -
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?
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:
- [C] donner valeurs à un tableau après déclara
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
10 réponses
essai :
const tab T1={...};
tab T2 = (tab){...};
int T3[10][10]=(int**){...};
const int T4[10][10]={...};// Celui là, au moins devrais fonctionné.
const tab T1={...};
tab T2 = (tab){...};
int T3[10][10]=(int**){...};
const int T4[10][10]={...};// Celui là, au moins devrais fonctionné.
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?
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?
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.
Par contre, défini tes tableau comme étant constant.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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?
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?
J'ai réussi!
Pour ceux que ça interesse, il suffit de faire :
const struct Jeu T1={ {...}, {...} };
Merci pour votre aide!
Pour ceux que ça interesse, il suffit de faire :
const struct Jeu T1={ {...}, {...} };
Merci pour votre aide!
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.
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.
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.
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.
à 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).
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).