Affichage d'un tableau

Résolu
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 - 12 janv. 2010 à 21:18
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 14 janv. 2010 à 09:17
Hello my friends,

J'ai un sérieux problème d'affichage, pour un truc que je pense avoir été bien fait, regardez bien:

Déclaration:
typedef struct truc {
int psl;
int dsl;
struct truc *suivl;/*pour pointer */
}CL;

Cette structure je l'ai mise dans un tableau comme suit:

CL*rat[20];

Dans le main, j'ai initialisé ce tableau comme suit:

for (int i1=1;i1<=20;i1++)
{
rat[i1]=(CL*)malloc(sizeof(CL));
rat[i1]->psl=1;
rat[i1]->dsl=50;
rat[i1]->suivl=NULL;
}
Et j'ai codé une procédure d'affichae ... mais bon: même lorsque je veux afficher une seule case rangeesl[i1] j'obtiens un nombre autre que celui que j'ai enregistré:

Affichage:
printf("%d","-----> %d",rat[i1]->psl,rat[i1]->dsl)

Or j'obtiens autre chose que 1 et 50 :(

Dites-moi où est le problème mes amis ?

Merci pour toute éventuelle réponse

11 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
13 janv. 2010 à 13:31
Ah mais attends...t'as un problème dans ton printf(), non?
printf("%d -----> %d",rat[i1]->psl,rat[i1]->dsl);

au lieu de
printf("%d","-----> %d",rat[i1]->psl,rat[i1]->dsl);


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 janv. 2010 à 22:37
La base d'indexation en vraie prog est 0 et non 1.

Tu remplaceras les fonctions Windows par les trucs console (je n'en fais plus depuis des lustres).
HeapAlloc -> malloc
- printf pour les reste.

Tout est testé et va impec.

#include <windows.h>
#include "utils.h"

char szappname[] = "aRat";

typedef struct _RAT {
int a;
int b;
struct RAT *next;
} RAT, *LPRAT;

void tstRAT()
{
char buf[480], *c;
RAT *rat[20];
RAT *prt;
int i;
HANDLE hprcss;

hprcss = GetProcessHeap();

for(i = 0; i < 20; i++) {
rat[i] = HeapAlloc(hprcss, HEAP_ZERO_MEMORY, sizeof(RAT));
rat[i]->a = 1;
rat[i]->b = 50;
}
for(i = 0; i < 19; i++) {
rat[i]->next = rat[i + 1];
}

prt = rat[0];
c = buf;
do {
c = bnultoa(prt->a, c);
*c++ = '-';
c = bnultoa(prt->b, c);
*c++ = 10;
} while(prt = prt->next);

*(c - 1) = 0;
MessageBox(0, buf, szappname, 0);

for(i = 0; i < 20; i++) {
HeapFree(hprcss, 0, rat[i]);
}
}

#pragma comment(linker, "/entry:myWinMain")
void __fastcall myWinMain()
{
tstRAT();
ExitProcess(0);
}

ciao...
BruNews, MVP VC++
0
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 9
13 janv. 2010 à 08:33
Merci pour la réponse Monsieur,

mais vous le savez mieux que moi: je n'ai pas commis d'erreurs algorithmique ou au niveau implémentation: je me demande pourquoi l'affichage ne fonctionne pas correctement (!?)

Je n'ai jamais utilisé les "trucs console" auparavant, et je dois terminer ce programme ...


Merci.
Begueradj
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 janv. 2010 à 09:04
CL*rat[20];
for (int i1=1;i1<=20;i1++)

Ecrire sur rat[20] qui n'existe pas, c'est forcément excellent.

ciao...
BruNews, MVP VC++
0

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

Posez votre question
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
13 janv. 2010 à 09:05
Hello,
BruNews t'a soulevé le problème.
En effet, tu commences à remplir ton tableau à partir de la case 1.
Or, quand tu veux afficher la case 0, elle n'a pas été allouée ni initialisée. Tu as donc un affichage incorrect...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 9
13 janv. 2010 à 12:12
Merci Buno,
J'ai déjà initialisé de 0 à 19 mais l'affichage n'a pas fonctionné !!
C'est vraiment très bizarre: comme si je commence à douter de l'efficacité du langage C .
0
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 9
13 janv. 2010 à 12:18
j'ai pris une case de range 9 (par exemple) pour l'afficher toute seule indépendamment des autres mais ça n'a pas fonctioné aussi :(
0
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 9
13 janv. 2010 à 12:23
je viens d'essayer les initialisations à 0 et 1.
aussi pour un compteur++ et un autre ++compteur:
en vain :(

P.S.j'ai implémenté ma source sur codeblocks version 8.0.2

Si je ne trouve pas de solution à ce problème, je vais me divorcer du langage C définitivement
0
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 9
13 janv. 2010 à 18:16
Merci Monsieur BUNO, je vais tester votre proposition ce soir à 23 heures (je suis loin de mon clavier à présent)
0
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 9
14 janv. 2010 à 08:07
Merci beaucoup pour votre réponse Monsieur Buno: ça a marché !
Vous avez sauvé un divorce entre moi et le C :)
Merci beaucoup

Begueradj
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
14 janv. 2010 à 09:17
Je suis pour la paix dans les ménages...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous