FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


  Pb ds un prog de structure chainée

 




karlito139 Le salon de discussion : ratur Godet Ln2 et Azote liquide : Xyala, 1 utilisateur anonyme et 5 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb ds un prog de structure chainée

n°6436
MHDfo
Posté le 17-01-2006 à 23:12:54  profilanswer
 

Jai un TP d'algo à rendre et je bloque. J'ai une erreur pendant ma compilation ligne 94
 
 
TRAVAUX PRATIQUES
Exercice
Ecrire un menu permettant de gérer une vidéothèque.
 
1. Définir une liste chaînée basée sur une structure DVD contenant le titre du film
(taille_max=20), le réalisateur (taille_max=20) et l’année.
 
2. Définir et implémenter une fonction nouveau_dvd qui retourne une structure DVD saisie
par l’utilisateur (sans pointeur). Il s’agit du premier élément de la liste.
On assignera au pointeur suivant de la structure la valeur NULL.
 
3. Définir et implémenter une fonction ajout_dvd permettant d’ajouter un DVD à la fin de la
liste chaînée. Cette fonction prendra en paramètre une structure DVD et la tête de la liste, et
retournera la tête de la liste.
Pourquoi faut-il retourner la tête de la liste ?
…………………………………………………………………………………………………
 
4. Définir et implémenter une fonction affiche_dvd qui affiche la liste des DVD (la tête de
liste sera passée en paramètre).
 
5. Définir et implémenter une fonction retire_dvd qui supprime un DVD de la liste chaînée.
Le titre du DVD sera saisi par l’utilisateur. Cette fonction prendra en paramètre la tête de la
liste et la retournera.
 

Code :
  1. #include <stdio.h>
  2. struct dvd
  3. {
  4. char titre[20];
  5. char real[20];
  6. int annee;
  7. struct dvd *p_suivant;
  8. };
  9. struct dvd new_dvd ()
  10. {
  11. struct dvd a;
  12. char y[20],z[20];
  13. int x,i;
  14. printf("Entrer le titre\n" );
  15. scanf("%s",z);
  16. printf("Entrer le réalisateur\n" );
  17. scanf("%s",y);
  18. printf("Entrer l'année\n" );
  19. scanf("%d",&x);
  20. for (i=0;i<20;i++)
  21.  a.titre[i] = z[i];
  22. for (i=0;i<20;i++)
  23.  a.real[i] = y[i];
  24. a.annee=x;
  25. a.p_suivant=NULL;
  26. return(a);
  27. }
  28. void ajout_dvd(struct dvd *ajout,struct dvd *nouveau)
  29. {
  30. nouveau=(struct dvd*) malloc(sizeof(struct dvd));
  31. nouveau->p_suivant=NULL;
  32. new_dvd();
  33. }
  34. void affiche_dvd(struct dvd *g,struct dvd *k)
  35. {
  36. printf("le titre est %s\n le réalisateur est %s\n l'année est %d\n", g->titre, g->real, g->annee);
  37. printf("le titre est %s\n le réalisateur est %s\n l'année est %d\n", k->titre, k->real, k->annee);
  38. }
  39. struct dvd retire_dvd(struct dvd *d);
  40. main()
  41. {
  42. int choix;
  43. struct dvd *dvd1;
  44. struct dvd *p;
  45. struct dvd *p_nouveau;
  46. struct dvd *p_tete;
  47. /* struct dvd *p_debut;*/
  48. *dvd1 = new_dvd();
  49. do
  50.  {
  51.  printf(" 1°)ajouter un dvd\n 2°)afficher un dvd\n 3°)supprimer un dvd\n 4°)sortir\n" );
  52.  scanf("%d",&choix);
  53.  switch(choix)
  54.   {
  55.   case 1:
  56.    {
  57.    ajout_dvd(p,p_tete);
  58.    p_tete=p_nouveau;
  59.    break;
  60.    }
  61.   case 2:
  62.    {
  63.    affiche_dvd(dvd1,dvd1.p_suivant);
  64.    break;
  65.    }
  66. /*  
  67.   case 3:
  68.    }
  69.    retire_dvd(p_nouveau);
  70.    break;
  71.    }
  72.  
  73.  
  74. */
  75.   }
  76.  }
  77.  while (choix!=4);
  78. }


 
 
Voila merci de votre aide

mood
Google
Posté le 17-01-2006 à 23:12:54  profilanswer
 

n°6437
Deadog
Dain Bramaged
Posté le 17-01-2006 à 23:34:52  profilanswer
 

c très simple ;)
 
quand tu as une structure tu as 2 syntaxe pour accéder aux éléments :
ta_struct.ton_elem
ta_struct->ton_elem
 
la première c'est quand la structure est alloué par le compilateur, c'est à dire définit comme étant simplement ta structure (comme un "int qqlch;" )
la deuxième c'est quand la structure est alloué par toi (malloc & co), c'est à dire définit par un pointeur.
 
Ici dvd1 est définit comme ça :
struct dvd *dvd1;
 
c'est donc un pointeur, donc notation avec -> et non . ;)
 
 
edit : ah, visiblement, une fois corrigé, ça marche plutôt mal :D


Message édité par Deadog le 17-01-2006 à 23:36:17
n°6438
MHDfo
Posté le 17-01-2006 à 23:36:50  profilanswer
 

oki je te remerci j'essaye ça.
Jai tester dans pas mal de sens la fonction pas ce quelle ne marchais pas.

n°6439
MHDfo
Posté le 17-01-2006 à 23:40:37  profilanswer
 

Vi sa doit etre pour sa que je lai changer.
Qd il retourne dans la strusture sa merde

n°6440
Deadog
Dain Bramaged
Posté le 17-01-2006 à 23:43:42  profilanswer
 

ton scanf, il ne s'y arrête pas ;)
 
edit : celui du main, pour le menu


Message édité par Deadog le 17-01-2006 à 23:46:56
n°6441
MHDfo
Posté le 17-01-2006 à 23:51:00  profilanswer
 

?

n°6442
MHDfo
Posté le 17-01-2006 à 23:52:41  profilanswer
 

je suis une bille en C, si tu pouvais etre plus explicite stp...
 
Mine de rien ce piti bout de code plein d'erreur ma couter plusieur heures de mon temps

n°6443
Deadog
Dain Bramaged
Posté le 17-01-2006 à 23:54:33  profilanswer
 

bah, quand je l'exécute, il ne s'arrête pas sur ton scanf, et boucle à l'infinie :/
 
après, je peux pas te dire grand chose de plus, les légendaires problèmes du scanf je ne les connait pas, puisque j'utilise pas ça.
mais bon, ce bon vieux scanf peut marcher très bien chez toi et pas du tout chez moi (c pour ça que je l'utilise pas :D)

n°6444
MHDfo
Posté le 17-01-2006 à 23:57:51  profilanswer
 

Lol oki. bon bah je crois que mon prof devras ce contenter de ça.
 
Merci comme de ton aide.

n°6445
MHDfo
Posté le 17-01-2006 à 23:58:20  profilanswer
 

pour info tu utilise quoi à la place d'un scanf?

n°6446
Deadog
Dain Bramaged
Posté le 18-01-2006 à 00:05:55  profilanswer
 

fgets

n°6447
MHDfo
Posté le 18-01-2006 à 00:09:45  profilanswer
 

oki je voit

n°6518
Mossieur P​ropre
Posté le 25-01-2006 à 22:41:43  profilanswer
 

Code :
  1. #             case 3:
  2. #                 }
  3. #                 retire_dvd(p_nouveau);
  4. #                 break;
  5. #                 }


 
zêtes tous des queues ou vous le faites exprès ? :heink:  
 
la première accolade est dans le mauvais sens.
 
De toutes façons, y'a pas besoin d'accolades pour un case


Message édité par Mossieur Propre le 25-01-2006 à 22:41:55

---------------
Forever Yoko in my heart. | http://www.phoenixfr.org - réseau IRC francophone | knexos xstephx a dit : "blabla"
n°6519
Deadog
Dain Bramaged
Posté le 26-01-2006 à 00:06:46  profilanswer
 

MrP > le case 3 est commenté [:dslam]

n°6520
Mossieur P​ropre
Posté le 26-01-2006 à 07:25:28  profilanswer
 

il dit que y'a une erreur de compil ligne 94, et chez moi, la ligne 94, elle indique cette accolade :|


---------------
Forever Yoko in my heart. | http://www.phoenixfr.org - réseau IRC francophone | knexos xstephx a dit : "blabla"
n°6521
Mossieur P​ropre
Posté le 26-01-2006 à 07:33:17  profilanswer
 

d'un autre côté, je crois que y'a un bug, j'ai des lignes qui ont 2 numéros oO
 
va falloir faire cravacher Josaÿ je crois :o


---------------
Forever Yoko in my heart. | http://www.phoenixfr.org - réseau IRC francophone | knexos xstephx a dit : "blabla"
n°6584
cybersplas​h
Laissez moi chanter !!!
Posté le 02-02-2006 à 22:10:55  profilanswer
 

j'ai pas encore compilé le programme mais je dirais deja qu'un petit fflush avant chaque scanf ce serait pas un luxe :)

n°6585
Deadog
Dain Bramaged
Posté le 02-02-2006 à 23:12:20  profilanswer
 

cybersplash a écrit :

je dirais deja qu'un petit fflush avant chaque scanf ce serait pas un luxe :)


 
[:vomi]
 
http://forum.hardware.fr/hardwaref [...] 6121-1.htm

n°6586
cybersplas​h
Laissez moi chanter !!!
Posté le 02-02-2006 à 23:48:01  profilanswer
 

Desuite les reflections sur fflush :)
 
il est tres cool :)
 
le petit programme qu'il est en train de faire marchera très bien avec un fflush deja qu'il arrive pas a faire une liste chainée faut pas non plus faire un truc de fou le but est juste de virer \n

n°6587
Deadog
Dain Bramaged
Posté le 02-02-2006 à 23:52:50  profilanswer
 

cybersplash a écrit :

Desuite les reflections sur fflush :)
 
il est tres cool :)
 
le petit programme qu'il est en train de faire marchera très bien avec un fflush deja qu'il arrive pas a faire une liste chainée faut pas non plus faire un truc de fou le but est juste de virer \n


 
 
fflush n'est pas fait pour supprimer les \n foireux qui font chié les programmeurs qui code mal
 
et flusher un flux d'entré est une absurdité


Message édité par Deadog le 02-02-2006 à 23:53:34
mood
Google
Posté le 02-02-2006 à 23:52:50  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


  Pb ds un prog de structure chainée

 

Hit Parade