Affichage d'un tableau [Résolu]

Signaler
Messages postés
273
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
24 juin 2014
-
Messages postés
15102
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 juillet 2021
-
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

Messages postés
15102
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 juillet 2021
97
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...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
273
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
24 juin 2014
6
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
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
15102
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 juillet 2021
97
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...
Messages postés
273
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
24 juin 2014
6
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 .
Messages postés
273
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
24 juin 2014
6
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 :(
Messages postés
273
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
24 juin 2014
6
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
Messages postés
273
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
24 juin 2014
6
Merci Monsieur BUNO, je vais tester votre proposition ce soir à 23 heures (je suis loin de mon clavier à présent)
Messages postés
273
Date d'inscription
dimanche 4 octobre 2009
Statut
Membre
Dernière intervention
24 juin 2014
6
Merci beaucoup pour votre réponse Monsieur Buno: ça a marché !
Vous avez sauvé un divorce entre moi et le C :)
Merci beaucoup

Begueradj
Messages postés
15102
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
27 juillet 2021
97
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...