Problème avec pointeur dans une structure - C - Programmation
Marsh Posté le 14-02-2005 à 11:16:02
pt = &tab[0]
pourquoi tu converti un pointeur sur 'struct FICHE' en 'int *' ?
Marsh Posté le 14-02-2005 à 11:17:31
chrisbk a écrit : pt = &tab[0] |
fo faire cmt alors?
Marsh Posté le 14-02-2005 à 11:18:26
ca doit être un malheureux copier/coller d'un bouquin sur le C
Marsh Posté le 14-02-2005 à 11:18:59
ReplyMarsh Posté le 14-02-2005 à 11:20:06
T'as une structure de type FICHE que tu castes en int, ça risque de pas marcher effectivement
Marsh Posté le 14-02-2005 à 11:20:54
bin explique moi la logique qui t'a guidé quand tu as ecrit :
Code :
|
?
pt etant de type 'int *' il n'a evidemment pas de membre 'nom'
tes void encodage(int nbre_elem, int *pt) doivent devenir void encodage(int nbre_elem, struct FICHE *pt), pour que la logique soit sauve.
Marsh Posté le 14-02-2005 à 11:21:39
couak a écrit : ca doit être un malheureux copier/coller d'un bouquin sur le C |
nan pas du tout je suis l'auteur de ce début de soft. Le problème est que je souhaite faire pointer pt sur tab0 comme prévu et pour utiliser la notion de pointeur en lieu et place de tab[0],tab[1]...
Marsh Posté le 14-02-2005 à 11:24:13
nolimites a écrit : nan pas du tout je suis l'auteur de ce début de soft. Le problème est que je souhaite faire pointer pt sur tab0 comme prévu et pour utiliser la notion de pointeur en lieu et place de tab[0],tab[1]... |
tu veux faire un pointeur sur une structure ou utiliser des pointeurs à la place de la syntaxe en tableaux ?
Marsh Posté le 14-02-2005 à 11:24:22
pourquoi t'utilises pas un "struct FICHE *" tout simplement pour faire office de pointeur? (au lieu de passer par un int *)
de toutes manières, ton "int *" il va falloir que tu le castes en "struct FICHE *" quand même si tu veux accéder aux champs de ta structure... comment veux-tu sinon que le compilo devines que c'est pas un int mais un struct FICHE que tu manipules dans tes fonctions?
Marsh Posté le 14-02-2005 à 11:26:50
chrisbk a écrit : bin explique moi la logique qui t'a guidé quand tu as ecrit :
|
ca va deja mieux en faisant je passe à 2 erreurs seulement visual c++ me dis que j'ai un erreur à mes appels de fonctions (ligne 68 et 69). Voici son message d'erreur: function : incompatible types
on y est presque je pense
Marsh Posté le 14-02-2005 à 11:28:36
bin si ton pt est tjs de type 'int *' y'a pas de quoi s'etonner
Marsh Posté le 14-02-2005 à 11:28:44
Oui, vu que t'as déclaré ton pt en int*
<edit>
<grilled by="chrisbk" />
</edit>
Marsh Posté le 14-02-2005 à 11:32:50
couak a écrit : tu veux faire un pointeur sur une structure ou utiliser des pointeurs à la place de la syntaxe en tableaux ? |
je veux simplement éviter dans mes fonctions ceci
tab[0]->nom
au tour de boucle suivant
tab[1]->nom
etc...
En gros juste éviter les syntaxes des tableaux
Marsh Posté le 14-02-2005 à 11:35:37
FlorentG a écrit : Oui, vu que t'as déclaré ton pt en int* |
faut le déclarer en quoi alors? Désolé pour ces questions de gros noob mais j'ai une crève pas possible et pas mal de soucis et je dois dire que j'ai pas spécialement la tête pour faire du c...
Qqun pourrait il gentillement me dire quoi modif pour que ca fonctionne
Marsh Posté le 14-02-2005 à 11:37:19
nolimites a écrit : faut le déclarer en quoi alors? Désolé pour ces questions de gros noob mais j'ai une crève pas possible et pas mal de soucis et je dois dire que j'ai pas spécialement la tête pour faire du c... |
hummm relis les réponses, on te l'a dis plusieurs fois
Marsh Posté le 14-02-2005 à 11:45:18
couak a écrit : hummm relis les réponses, on te l'a dis plusieurs fois |
voila je viens de mettre à jour mon code. Cependant la déclaration de mon pointeur est elle mauvaise car la je n'ai plus d'erreurs mais 5 warnings et mon prog plante
Ou ai je encore merdé???
Marsh Posté le 14-02-2005 à 11:46:18
ReplyMarsh Posté le 14-02-2005 à 11:46:28
ne nous dit surtout pas quelles lignes provoquent des erreurs et la nouvelle tête qu'a prit ton code
non non
pas la peine
on va deviner tous seuls
Marsh Posté le 14-02-2005 à 11:51:00
the-forgotten a écrit : ne nous dit surtout pas quelles lignes provoquent des erreurs et la nouvelle tête qu'a prit ton code |
jparie qu'il a fais un truc pas propre partout où le compilo lui renvoi un warning
Marsh Posté le 14-02-2005 à 11:53:05
voici les erreurs:
C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc40.c(20) : warning C4028: formal parameter 2 different from declaration
C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc40.c(42) : warning C4028: formal parameter 2 different from declaration
C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc40.c(64) : warning C4133: '=' : incompatible types - from 'struct FICHE *' to 'int *'
C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc40.c(69) : warning C4133: 'function' : incompatible types - from 'int *' to 'struct $S2 *'
C:\Documents and Settings\Cyg@ce\Mes documents\C\Seconde annee\Dossier\lc40.c(70) : warning C4133: 'function' : incompatible types - from 'int *' to 'struct $S1 *'
lc40.obj - 0 error(s), 5 warning(s)
Marsh Posté le 14-02-2005 à 11:54:15
couak a écrit : jparie qu'il a fais un truc pas propre partout où le compilo lui renvoi un warning |
regardez plus haut le code est mis à jour dans mon post aussi et provoque les warnings ci hauts
Marsh Posté le 14-02-2005 à 11:55:44
"struct *"
struct FICHE *
et ton pt est toujours de type 'int *' c'est mal
Marsh Posté le 14-02-2005 à 11:57:14
nolimites a écrit : regardez plus haut le code est mis à jour dans mon post aussi et provoque les warnings ci hauts |
merci d'avoir prévenu, heureusement que le post ne fait pas plusieurs pages, sinon j'aurais du relire tous les messages (chose que tu ne fais pas de tte manière)
Marsh Posté le 14-02-2005 à 12:00:51
pt=&tab[0]
si (et ça devrait être le cas le temps que j'intervienne) l'erreur du "int *pt" est corrigée, moi j'avoue que j'ai une préférence pour "pt=tab"
mais bon, chacun son truc aprés
j'ajouterais aussi une sécurité sur nbre_elem (max 50)
et donc une jolie constante plutôt que ces hideux 50 qui se balladent tous seuls
Marsh Posté le 14-02-2005 à 12:04:29
couak a écrit : merci d'avoir prévenu, heureusement que le post ne fait pas plusieurs pages, sinon j'aurais du relire tous les messages (chose que tu ne fais pas de tte manière) |
ne te méprend pas le n'était pas detiné à toi mais au fait que j'avais tjs des erreus c tt
Marsh Posté le 14-02-2005 à 12:06:38
chrisbk a écrit : "struct *" |
bon je sais que ca va commencer à tenir du mega boulet mais je dois le mettre de quel type???
Marsh Posté le 14-02-2005 à 12:07:42
nolimites a écrit : bon je sais que ca va commencer à tenir du mega boulet mais je dois le mettre de quel type??? |
tu as la réponse sous les yeux
dans le propre post que tu viens de quoter
Marsh Posté le 14-02-2005 à 12:13:15
the-forgotten a écrit : tu as la réponse sous les yeux |
je suis d'accord mais pt est un pointeur, donc pour le déclarer je le déclare de type int * pt(je sais pas si c'est le bon type,pt c'est le nom et le * indique que c'est un pointeur). Cette déclaration n'est pas bonne? ok mais alors de quel type doit être mon pt?
Marsh Posté le 14-02-2005 à 12:15:42
si tu sais vers quoi tu veux faire pointer ton pointeur, tu trouveras la réponse
Marsh Posté le 14-02-2005 à 12:23:30
voila je viens de mettre à jour mon code ci-dessus, j'ai plus d'erreurs ni de warning mais j'ai droit à un beau crash du programme après la saisie de l'age
Marsh Posté le 14-02-2005 à 12:24:27
nolimites a écrit : bon je sais que ca va commencer à tenir du mega boulet mais je dois le mettre de quel type??? |
t'as un tableau de TRUC. Genre
TRUC machin[20];
tu veux un pointeur vers le premier element de truc. Donc tu veux un pointeur sur TRUC.
Donc, "TRUC *"
vouala
Marsh Posté le 14-02-2005 à 12:55:00
chrisbk a écrit : t'as un tableau de TRUC. Genre |
en gros dans mon code ca donne quoi? peux tu faire le modif ds mon code direct merci
Marsh Posté le 14-02-2005 à 13:19:59
Le programme plante parce qu'il faut incrémenter pt dans les boucles
pt++ et pas pt + i.
vaut mieux écrire
for (i = 0; i < nbre_elem; i++, pt++)
Marsh Posté le 14-02-2005 à 13:28:49
podone a écrit : Le programme plante parce qu'il faut incrémenter pt dans les boucles |
ca ne change rien j'ai tjrs la même erreur cad que le prog plante après la saisie de l'âge
Marsh Posté le 14-02-2005 à 13:29:36
Que se passe-t-il après 50 saisies ?
Il faut travailler en allocation dynamique.
Marsh Posté le 14-02-2005 à 13:31:36
nolimites a écrit : ca ne change rien j'ai tjrs la même erreur cad que le prog plante après la saisie de l'âge |
logique
scanf ("%d",pt->age);
pas bon
scanf ("%d",&pt->age);
bon
Marsh Posté le 14-02-2005 à 13:39:17
chrisbk a écrit : logique |
yep ca fonctionne merci à tous vous êtes super
Par contre pqoi la je dois mettre un & et pas aux autres???
Marsh Posté le 14-02-2005 à 14:18:20
Une mise en forme propre
Code :
|
Marsh Posté le 14-02-2005 à 11:05:16
Bonjour,
je suis loin d'être une bête en c. Mon prof m'a demandé d'encoder des éléments dans une structure et de les afficher. Mais il veut que l'on utilise les pointeurs et c'est la que mon programme bug.
Pourriez vous me dire ce qui ne va pas et pour que je puisse enfin compiler ce soft
Merci d'avance
Message édité par nolimites le 14-02-2005 à 15:10:44