Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1197 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Matrice de structures : probleme de remplissage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Matrice de structures : probleme de remplissage

n°1881034
kwaio
Posté le 05-05-2009 à 12:35:14  profilanswer
 

Voila, j'essaie de faire un tableau à deux dimensions de structures.
Le probleme c'est que quand je remplis une case, toutes les lignes prennent la même valeur.
 
Voyez vous même :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. struct bloc
  5. {
  6. int nord,sud,est,ouest;
  7. }  ;
  8. int main(void)
  9. {
  10.   // on demarre le randomisateur (lol)
  11.   srand(time(NULL));
  12.   //Hope, deux trois variables
  13.   int lo=0;
  14.   int la=0;
  15.   int i,j;
  16.  
  17.  
  18.   // Dédale ou 3-5ans ?   
  19.   printf("Longueur du labyrinthe ? " );
  20.   scanf("%d",&lo);
  21.   printf("Largeur du labyrinthe ? " );
  22.   scanf("%d",&la);
  23.  
  24.   // informaticiens : debut = 0, Humains : debut = 1
  25.   lo--;
  26.   la--;
  27.  
  28.   //Et hop ! Labyrinthe créé
  29.   struct bloc laby[la][lo];
  30.   // on met tout à 0
  31.   for(j=0;j<=lo;j++)
  32.   {
  33.       for(i=0;i<=la;i++)
  34.       {
  35.         laby[i][j].nord=0;
  36.         laby[i][j].ouest=0;
  37.         laby[i][j].est=0;
  38.         laby[i][j].sud=0;
  39.       }
  40.   }
  41.            laby [1][2].nord=2;
  42.            laby [1][3].ouest=4;
  43.            laby [2][0].est=6;
  44.            laby [2][3].sud=8;
  45. // on affiche tout :
  46.   printf("modele : [n,e,s,o] \n" );
  47.   for(j=0;j<=lo;j++)
  48.   {
  49.       for(i=0;i<=la;i++)
  50.       {
  51.         printf("(%d,%d)[%d,%d,%d,%d]\t",i+1,j+1,laby[i][j].nord,laby[i][j].est,laby[i][j].sud,laby[i][j].ouest);
  52.       }
  53.       printf("\n" );
  54.   }
  55. //...


 
Et avec ça j'ai toutes mes "lignes" identiques...
D'où vient le probleme ?
 
merci d'avance

mood
Publicité
Posté le 05-05-2009 à 12:35:14  profilanswer
 

n°1881036
olivthill
Posté le 05-05-2009 à 12:39:56  profilanswer
 

struct bloc laby[la][lo];
...
for(j=0;j<=lo;j++)
...

Il y a un problème d'indice. Il faut déclarer lo+1 (idem pour la) ou bien faire une boucle avec "<" au lieu de "<=".
Je ne sais pas si le problème vient de là. En tous cas, c'est un problème.

n°1881037
kwaio
Posté le 05-05-2009 à 12:41:59  profilanswer
 

Ben non, sinon le programme m'affiche une matrice 2*2 alors que je demande une 3*3.
Tu as vu le :

Code :
  1. lo--;
  2. la--;

?
Bizarrement, je n'ai pas ce probleme avec une matrice 2*2


Message édité par kwaio le 05-05-2009 à 12:43:45
n°1881038
olivthill
Posté le 05-05-2009 à 12:44:46  profilanswer
 

Les moins moins ne sont pas placés au bon endroit. Il aurait fallu les mettre juste après la déclaration, pas avant. Mais le plus simple et le plus habituel est de ne pas avoir de moins moins, mais de faire un test inférieur strictement au lieu de ce inférieur ou égal.


Message édité par olivthill le 05-05-2009 à 12:46:31
n°1881048
kwaio
Posté le 05-05-2009 à 12:56:37  profilanswer
 

Certes mais le problème n'est pas là, si ?
 
Mon "remplissage de case" est bien syntaxé ?

n°1881049
olivthill
Posté le 05-05-2009 à 13:00:59  profilanswer
 

Comme je l'ai dit, je ne sais pas si le problème est là ou pas. Je sais juste qu'un débordement est un problème grave, qu'il faut traiter en premier lieu.
 
Pour ce qui est de la syntaxe, il faut voir s'il y a des messages d'erreur ou d'avertissement à la compilation.

n°1881053
kwaio
Posté le 05-05-2009 à 13:07:12  profilanswer
 

aucun, non
 
pour le débordement, j'ai pas bien compris ce que je suis sensé faire...
faire  

Code :
  1. scanf("%d",&lo);
  2. ...
  3. bloc laby [lo-1][la-1];
  4. ...
  5. for (i=0;i<la;i++)
  6. ...


 
??

n°1881060
olivthill
Posté le 05-05-2009 à 13:35:07  profilanswer
 

bloc laby [lo-1][la-1];

Aie. Non, il faut tout simplement

bloc laby [lo][la]


Vérifions en comptant (et pour simplifier, je ne considère qu'une dimension) : Si lo = 3. Avec une boucle for(i= 0; i < 3; i++) cela donne 0, 1, 2. Donc 3 remplissages pour un tableau ayant trois cases.

n°1881236
kwaio
Posté le 06-05-2009 à 00:13:34  profilanswer
 

Ah oui, exact.
Ca a l'air de résoudre le probleme...


Message édité par kwaio le 06-05-2009 à 00:17:34
n°1881241
kwaio
Posté le 06-05-2009 à 00:56:43  profilanswer
 

Merci =)
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Matrice de structures : probleme de remplissage

 

Sujets relatifs
Problème d'inbricatation avec mes ifproblème de recherche
Problème d'incrémentation de variable![SQL] Problème création BDD SQL
Programmer en C help SVP microchip PIC18FMélange port série, C++ et boost::asio
Problème changement fenêtre[RESOLU] Probleme Application FileDialog
probléme lors du download de zip en php[Newbie] utilisation de fscanf et retour fonction
Plus de sujets relatifs à : [C] Matrice de structures : probleme de remplissage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR