CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] probleme liste chainée

ffx12
ffx12
Niveau 10
04 août 2011 à 00:19:30

Bonjour je chercher a faire une liste chainee d une structure mais je n arrive pas a afficher a la fin les elements de la liste :

  1. include <stdio.h>
  2. include <stdlib.h>

int main (int argc, char* argv[])
{ typedef struct liste liste;
struct liste
{
char nom [20];
struct liste *nxt;
} *tete, *courant, *nouveau;
int i;
tete = NULL;
for (;;)
{
nouveau = (struct liste*) malloc( sizeof (struct liste) );
if (nouveau == NULL)
{
perror("Erreur d'allocation memoire");
exit(EXIT_FAILURE);
}
nouveau -> nxt = NULL;
printf("Nom 'FIN pour quitter' :"); scanf("%s", nouveau -> nom);
printf("%s\n",nouveau -> nom);
if(strcmp(nouveau -> nom,"FIN") == 0)
{
courant = nouveau;
while(courant != NULL)
{
printf("%s\n", courant->nom);
courant = courant -> nxt;
}
break;
}
}
free(nouveau);
return 0;
}

merci

caelacanthe
caelacanthe
Niveau 10
04 août 2011 à 00:25:16

je ne sais pas si c'est bien reglo de coller des typedef dans le main, de créer à la volée des types de variable au moment de leur déclaration et de ne rien mettre dans les conditions d'un for() :hap:

et puis, tu devrais mettre ton code sur pastebin, là c'est pas très lisible sans indendation :oui:

Glosoli
Glosoli
Niveau 10
04 août 2011 à 00:26:04

Il fait peur ce code dîtes. :hap:

Pocolo
Pocolo
Niveau 10
04 août 2011 à 00:29:08

" et de ne rien mettre dans les conditions d'un for() :hap: "

Non ça c'est tout a fait normal "for(;;)" est ce qui est communément utilisé pour une boucle infinie, on peut aussi mettre un truc comme "while(1)" bien sur.

ffx12
ffx12
Niveau 10
04 août 2011 à 00:32:27

merci pour ton lien , j espere que sa sera plus comprehensible et merci pour votre aide
http://pastebin.com/y02zYjJm

caelacanthe
caelacanthe
Niveau 10
04 août 2011 à 00:32:46

"Non ça c'est tout a fait normal "for(;;)" est ce qui est communément utilisé pour une boucle infinie"

:d) va pour le normal, à la limite... mais communément utilisé, ça fait bizarre, je crois que le while(true) colle plus aux standards de programmation (si tant est qu'une boucle infinie aie sa place dans de tels standards :hap: )

ffx12
ffx12
Niveau 10
04 août 2011 à 00:46:53

je pense que c est a la ligne 24 : courant = nouveau .
Qu en pensez vous ? , je bloque depuis 1h

Pocolo
Pocolo
Niveau 10
04 août 2011 à 00:47:18

" va pour le normal, à la limite... mais communément utilisé, ça fait bizarre "

Je maintiens, c'est assez commun.

godrik
godrik
Niveau 30
04 août 2011 à 01:16:05

oui je vois for (;;) souvent.

NdM: La frequence d'utilisation de differente forme de boucle infinie est relativement HS sur ce topic. Donc continuer la sur le blabla si vous voulez rajouter qqch.

ffx12
ffx12
Niveau 10
04 août 2011 à 01:23:43

je reviendrai voir demain , voir si quelqu un a trouve une solution car la je seche
merci a ceux qui m aide

Nightmarez
Nightmarez
Niveau 9
04 août 2011 à 10:22:09

Desole, mais je n'arrive pas a voir la ligne ou tu lies les maillons entre eux.

Parce que pour le moment ce que je vois, c'est que tu crees des structures, et que tu leurs mets TOUTES NULL en next, ce qui fait que tu perds tes maillons les uns a la suite.

ffx12
ffx12
Niveau 10
04 août 2011 à 23:21:36

merci de votre aide et en particulier a Nightmarez la correction
http://pastebin.com/88y5pT4r

Nightmarez
Nightmarez
Niveau 9
06 août 2011 à 00:23:18

Je ne vois nulle part un endroit ou tu fais genre
"courrant->next = tete;
tete = courrant;"

donc au final tu ne links pas les maillons de ta liste chainee, qui n'en est donc pas une.

ffx12
ffx12
Niveau 10
06 août 2011 à 00:29:54

hum , se n est pas bon ?
if ( head == NULL) {
head = news;
courant = news;
}
else {
courant->next = news;
courant = news;
}

ffx12
ffx12
Niveau 10
06 août 2011 à 00:36:15

desole du double post , mais j avais mis en ligne la mauvaise correction
http://pastebin.com/pqwJSYK9

Nightmarez
Nightmarez
Niveau 9
07 août 2011 à 15:15:39

Tu n'as besoin que de deux pointeurs sur structure ps pour cette fonction, un qui represente la racine de la liste chainee, l'autre qui servira a allouer un maillon.

Je te conseille de garder "head" et "nouveau". Tu initialises head a NULL avant la boucle.

A la fin de ta boucle for, tu devrais avoir
"nouveau->next = head;
head = nouveau;"

Ce qui devrait bien lier ta liste chainee et eviter de perdre des maillons.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment