a l'aide c petit mais c faux et je ne trouve pas

a l'aide c petit mais c faux et je ne trouve pas - C - Programmation

Marsh Posté le 02-01-2005 à 23:21:51    

bon je vous explique vite g une structure liste comme suit :
typedef                 struct liste_s
{
  int                   val1;
  int                   val2;
  int                   tab[6];
  char                  op;
  struct liste_s        *next;
}                       *liste;
 
dans mon main g un truc du genre  
liste *t;
 
t = malloc(1000 * sizeof(liste));
for (i = 0;i < 6;i++)
  put_in_begin(&t[i], valeur, 0, 0, tableau)
 
le probleme c que je n'ai pas les bonnes valeurs apres la fonction et g remarque avec gdb que ma fonction put_in_liste initialise comme il faut  t[i] mais elle modifie aussi t[i - 1]. donc a la fin seul le dernier element i passer dans put_in_liste c a dire t[5] a les bonnes valeurs
j'ai chercher, peut etre mal mais je n'ai toujours pas trouve l'erreur.
 
merci de votre aide...
 
void    put_in_liste(liste *begin,
                     int val1,
                     char op,
                     int val2,
                     int *tab)
{
  liste elem;
  int   i;
 
  if (val1 < val2)
    swap(&val1, &val2);
  elem = malloc(sizeof (elem));
  elem->val1 = val1;
  elem->val2 = val2;
  elem->op = op;
  for (i = 0;i < 6;i++)
    elem->tab[i] = tab[i];
  elem->next = *begin;
  *begin = elem;
}


---------------
  ____
Reply

Marsh Posté le 02-01-2005 à 23:21:51   

Reply

Marsh Posté le 02-01-2005 à 23:24:34    

[Merci d'utiliser les tags 'code' ou 'cpp' (boutons [Fixe] ou [C/C++]]
 

minimoke a écrit :


 if (val1 < val2)
    swap(&val1, &val2);



Manque la définition de swap().


Message édité par Emmanuel Delahaye le 02-01-2005 à 23:26:02

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 02-01-2005 à 23:25:28    

void    swap(int *a, int *b)
{
  int   tmp;
 
  tmp = *a;
  *a = *b;
  *b = tmp;
}


---------------
  ____
Reply

Marsh Posté le 02-01-2005 à 23:25:46    

je pense pas que c ca


---------------
  ____
Reply

Marsh Posté le 02-01-2005 à 23:27:41    

}                       *liste;  
 
t'es sur de la vouloir ton étoile ici ?

Reply

Marsh Posté le 02-01-2005 à 23:29:12    

minimoke a écrit :

je pense pas que c ca


C'est quoi  

put_in_begin(...) ?
 tableau ?


Ce serait mieux de poster du code qui compile plutôt que "un truc du genre  " ...


Message édité par Emmanuel Delahaye le 02-01-2005 à 23:31:11

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 02-01-2005 à 23:29:28    

ben oui normalement ca pose pas de probleme


---------------
  ____
Reply

Marsh Posté le 02-01-2005 à 23:29:51    

ben oui il compile


---------------
  ____
Reply

Marsh Posté le 02-01-2005 à 23:35:28    

typedef                 struct liste_s
{
  int                   val1;
  int                   val2;
  int                   tab[6];
  char                  op;
  struct liste_s        *next;
}                       *liste;
 
void    put_in_liste(liste *begin,
                     int val1,
                     char op,
                     int val2,
                     int *tab)
{
  liste elem;
  int   i;
 
  if (val1 < val2)
    swap(&val1, &val2);
  elem = malloc(sizeof (elem));
  elem->val1 = val1;
  elem->val2 = val2;
  elem->op = op;
  for (i = 0;i < 6;i++)
    elem->tab[i] = tab[i];
  elem->next = *begin;
  *begin = elem;
}
 
void    init(liste *tab, int *val, int index)
{
  liste elem;
  int   *myval;
  int   i;
 
  myval = duptab(val, 6);
  myval[index] = 0;
  put_in_liste(&tab[index], val[index], 0, 0, myval, tab);
  free(myval);
}
 
int     main(int ac, char **av)
{
  liste *tab;
  int   *val;
  int   i;
 
  tab = malloc(1000 * sizeof(liste));
  val = test_entree(ac, av); // recupere 6 valeurs entree en param ca marche
  for(i = 0;i < 6;i++)
    init(tab, val, i);
  return (0);
}


---------------
  ____
Reply

Marsh Posté le 02-01-2005 à 23:46:35    

[Les balises code. Deuxième édition... Lire les regles du forums, merci...]


Gni ?


gcc.exe --c main.c -o dexe/main.o -W  -Wall  -ansi  -O2
 
main.c: In function `put_in_liste':
main.c:20: warning: implicit declaration of function `swap'
main.c:21: warning: implicit declaration of function `malloc'
main.c:21: warning: assignment makes pointer from integer without a cast
main.c: In function `init':
main.c:37: warning: implicit declaration of function `duptab'
main.c:37: warning: assignment makes pointer from integer without a cast
main.c:39: too many arguments to function `put_in_liste'
main.c:40: warning: implicit declaration of function `free'
main.c:33: warning: unused variable `elem'
main.c:35: warning: unused variable `i'
main.c: In function `main':
main.c:49: warning: assignment makes pointer from integer without a cast
main.c:51: warning: implicit declaration of function `test_entree'
main.c:51: warning: assignment makes pointer from integer without a cast


C'est si compliqué que ça de poster un code complet ? Qui me dit que le problème n'est pas dans le code que tu ne fournis pas ?
 


Message édité par Emmanuel Delahaye le 02-01-2005 à 23:51:02

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 02-01-2005 à 23:46:35   

Reply

Marsh Posté le 02-01-2005 à 23:54:02    

minimoke a écrit :

ben oui normalement ca pose pas de probleme


ah, bon, dans ce cas tu n'alloues jamais d'espace pour des 'struct list_s' mais que pour des pointeurs. A toi de voir. Mais comme le dit Emmanuel, c'est pas la peine d'aller plus loin si tu donnes quelque chose qui ne compile même pas.

Reply

Marsh Posté le 02-01-2005 à 23:59:35    

http://minimoke.free.fr/test/test.c
voila un truc qui compile.  
Sinon je nai pas besoin d'allouer de l'espace pour une structure car je definie que des liste donc elles sont definie par un pointeur.


---------------
  ____
Reply

Marsh Posté le 03-01-2005 à 00:17:33    

et alors tu le stockes ou ton pointeur *next ?

Reply

Marsh Posté le 03-01-2005 à 00:18:38    

minimoke a écrit :

http://minimoke.free.fr/test/test.c
voila un truc qui compile.  
Sinon je nai pas besoin d'allouer de l'espace pour une structure car je definie que des liste donc elles sont definie par un pointeur.



gcc.exe -c main.c -o dexe/main.o -W  -Wall  -ansi  -O2
 
main.c: In function `print_usage':
main.c:12: warning: implicit declaration of function `printf'
main.c:13: warning: implicit declaration of function `exit'
main.c: In function `test_entree':
main.c:49: warning: implicit declaration of function `malloc'
main.c:49: warning: assignment makes pointer from integer without a cast
main.c:53: warning: implicit declaration of function `atoi'
main.c: In function `duptab':
main.c:69: warning: assignment makes pointer from integer without a cast
main.c: In function `put_in_liste':
main.c:99: warning: assignment makes pointer from integer without a cast
main.c: In function `init':
main.c:117: too many arguments to function `put_in_liste'
main.c:118: warning: implicit declaration of function `free'
main.c:111: warning: unused variable `elem'
main.c:113: warning: unused variable `i'
main.c: In function `main':
main.c:127: warning: assignment makes pointer from integer without a cast


Je veux bien aider, mais j'aime pas qu'on se foute de moi.  
Bonsoir.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-01-2005 à 00:23:32    

ben c bon c juste que les fonctions sont dans le desordres ca compile si tu veut tu peux rajouter les definitions des fonctions pour enlever les warnings mais la n'est pas le probleme. le seul truc qu g oublier d'enlever c le ", tab" dans put_in _liste


---------------
  ____
Reply

Marsh Posté le 03-01-2005 à 00:24:28    

non, il manque des tas de #include

Reply

Marsh Posté le 03-01-2005 à 00:26:37    

g fait ca vite fait car j'allais pas balancer 10 tones de codes donc excuser moi pour les oubli d'include mais je voudrais juste savoir ce qu'il cloche dans ma fonction put_in_liste et je ne trouver pas necessaire de vous envoyer tout le code


---------------
  ____
Reply

Marsh Posté le 03-01-2005 à 00:57:34    

ton but c'est de faire un tableau de liste ?

Reply

Marsh Posté le 03-01-2005 à 01:39:42    

oui en fait je doit coder le compte est bon avec un graphe
de ce genre (tableau de liste)


---------------
  ____
Reply

Marsh Posté le 03-01-2005 à 01:40:19    

g tout fait sauf qu'il y a juste ce probleme a regler


---------------
  ____
Reply

Marsh Posté le 03-01-2005 à 01:47:28    

ben c'est quand tu veux pour écouter ma recommandation

Reply

Marsh Posté le 03-01-2005 à 01:49:17    

Je pige pas tous ton code mais cette ligne tes sur qu'elle est necessaire ?
 

Code :
  1. void    put_in_liste(liste *begin,
  2.                      int val1,
  3.                      char op,
  4.                      int val2,
  5.                      int *tab)
  6. {
  7.   liste elem;
  8.   int   i;
  9.   if (val1 < val2)
  10.     swap(&val1, &val2);
  11.   elem = malloc(sizeof (elem));
  12.   elem->val1 = val1;
  13.   elem->val2 = val2;
  14.   elem->op = op;
  15.   for (i = 0;i < 6;i++)
  16.     elem->tab[i] = tab[i];
  17.   elem->next = *begin; //cette ligne
  18.   *begin = elem;
  19. }


 
Le dernier element de ta liste doit avoir next qui pointe vers NULL non?
Ca fait un peu boucle ton truc
 
Et Taz a raison met ton  code sur le forum avec les balise !


Message édité par ffomnislash le 03-01-2005 à 01:50:12
Reply

Marsh Posté le 03-01-2005 à 01:51:55    

je parle pas de ça bordel : je parle que quand on écrit  
 
# elem = malloc(sizeof (elem));
#   elem->val1 = val1;
#   elem->val2 = val2;
 
on a alloué un struct s_list * et pas un struct s_list donc ça part dans le décors :o
 
voir mon premier post

Reply

Marsh Posté le 03-01-2005 à 01:55:25    

oauis spa faux ton truc là :D
 
C'est Emmanuel Delahaye qui rale pour le code :D en faite


Message édité par ffomnislash le 03-01-2005 à 01:56:04
Reply

Marsh Posté le 03-01-2005 à 09:15:23    

oups merci taz.
C ce que je me suis dit ce matin dans mon lit j'y ai repencer.


---------------
  ____
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed