[C] pointeur de structure
Résolu/Fermé
jamsss
Messages postés
36
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
19 septembre 2011
-
7 sept. 2009 à 22:42
jamsss Messages postés 36 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 septembre 2011 - 8 sept. 2009 à 18:11
jamsss Messages postés 36 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 septembre 2011 - 8 sept. 2009 à 18:11
A voir également:
- [C] pointeur de structure
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Pointeur souris disparu windows 10 - Guide
- Structure d'un rapport de stage - Guide
- Pointeur souris - Guide
- Pointeur souris disparu pc portable asus - Guide
8 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
8 sept. 2009 à 09:59
8 sept. 2009 à 09:59
Salut,
Ta fonction n'a pas de type de retour (voir aussi pour les autres fonctions)
diff(struct temps *t1,struct temps *t2)
Ce n'est pas plutôt?
Ta fonction n'a pas de type de retour (voir aussi pour les autres fonctions)
diff(struct temps *t1,struct temps *t2)
Ce n'est pas plutôt?
struct temps* diff(struct temps *t1,struct temps *t2)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
8 sept. 2009 à 10:37
8 sept. 2009 à 10:37
Re,
106485010510997108
t3=(struct temps*) malloc(sizeof( struct temps ));--
106485010510997108
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
Jamsss
8 sept. 2009 à 12:47
8 sept. 2009 à 12:47
Re,
t3 c'est un pointeur de structure temsp donc de type struct temps*
Quand tu alloues de la mémoire c'est la taille de la structure temps que tu alloues pas celle de pointeur comme tu l'as fait.
Peut être que tu n'est pas obligé de caster et tester tout simplement
t3 c'est un pointeur de structure temsp donc de type struct temps*
Quand tu alloues de la mémoire c'est la taille de la structure temps que tu alloues pas celle de pointeur comme tu l'as fait.
Peut être que tu n'est pas obligé de caster et tester tout simplement
t3 = malloc (sizeof (struct temps));
jamsss
Messages postés
36
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
19 septembre 2011
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
8 sept. 2009 à 17:36
8 sept. 2009 à 17:36
Ça ne fonctionne pas... avec ou sans le cast ça me met toujours les mêmes erreurs
biboo_
Messages postés
1249
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
14 mars 2012
106
8 sept. 2009 à 11:10
8 sept. 2009 à 11:10
Bah déjà, mets un type de retour. :D
Puis il manque le cast en effet. :)
Puis il manque le cast en effet. :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
8 sept. 2009 à 17:51
8 sept. 2009 à 17:51
Salut,
Voici ton code compilé sous
Plus bas tu as la compilation et un exemple d'exécution.
Voici ton code compilé sous
Linux debian 2.6.26-2-686 #1 SMP Wed Aug 19 06:06:52 UTC 2009 i686 GNU/Linux gcc (Debian 4.3.2-1.1) 4.3.2 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Plus bas tu as la compilation et un exemple d'exécution.
#include <stdio.h> #include <stdlib.h> struct temps{ int heure; int minute; int seconde; }; void entree(struct temps *t); int post(struct temps *t1,struct temps *t2); struct temps* diff(struct temps *t1,struct temps *t2); void sortie(struct temps *t3); int main() { int x; struct temps t1; struct temps t2; struct temps *t3; struct temps tx; entree(&t1); entree(&t2); x=post(&t1,&t2); if (x==-1){ tx=t1; t1=t2; t2=tx; } t3=diff(&t1,&t2); sortie(t3); return 0; } void entree(struct temps *t){ printf("Entrez un temps (hh:mn:sec) : "); scanf("%i : %i : %i",&(t->heure),&(t->minute),&(t->seconde)); while (t->heure<0 || t->heure>23 || t->minute<0 || t->minute>59 || t->seconde<0 || t->seconde>59){ printf("Temps invalide...Veuillez recommencer..."); scanf("%i : %i : %i",&(t->heure),&(t->minute),&(t->seconde)); } } int post(struct temps *t1,struct temps *t2){ int x; if (t1->heure>t2->heure) x=-1; if (t1->heure==t2->heure) x=0; if (t1->heure<t2->heure) x=1; if (x==0){ if (t1->minute>t2->minute) x=-1; if (t1->minute==t2->minute) x=0; if (t1->minute<t2->minute) x=1; if (x==0){ if (t1->seconde>t2->seconde) x=-1; if (t1->seconde==t2->seconde) x=0; if (t1->seconde<t2->seconde) x=1; } } return x; } struct temps* diff(struct temps *t1,struct temps *t2){ struct temps *t3; t3=(struct temps*) malloc(sizeof(struct temps)); t3->heure=t2->heure-t1->heure; t3->minute=t2->minute-t1->minute; t3->seconde=t2->seconde-t1->seconde; return t3; } void sortie(struct temps *t3){ printf("La différence entre les deux temps est de : %i h %i mn %i sec\n",t3->heure,t3->minute,t3->seconde); }compilation et exécution
lami20j@debian:~$ gcc c.c lami20j@debian:~$ ./a.out Entrez un temps (hh:mn:sec) : 10:05:20 Entrez un temps (hh:mn:sec) : 11:02:30 La différence entre les deux temps est de : 1 h -3 mn 10 sec
jamsss
Messages postés
36
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
19 septembre 2011
8 sept. 2009 à 17:59
8 sept. 2009 à 17:59
Je te remercie mais je viens justement de trouver la solution, enfin ! Pas simple ces pointeurs quand on débute en C, encore merci pour ton aide
A bientôt
Jamsss
A bientôt
Jamsss
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
8 sept. 2009 à 18:05
8 sept. 2009 à 18:05
Re,
Pour moi, à part les prototypes et le type des fonctions, la seule erreur que j'ai trouvé c'était ici
sortie(&t3);
En fait t3 dans main étant déjà un pointeur &t3 c'est l'adresse d'un pointeur.
La fonction sortie demande un pointeur de fonction en argument donc il fallait écrire
Pour moi, à part les prototypes et le type des fonctions, la seule erreur que j'ai trouvé c'était ici
sortie(&t3);
En fait t3 dans main étant déjà un pointeur &t3 c'est l'adresse d'un pointeur.
La fonction sortie demande un pointeur de fonction en argument donc il fallait écrire
sortie(t3);
jamsss
Messages postés
36
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
19 septembre 2011
8 sept. 2009 à 18:11
8 sept. 2009 à 18:11
Oui oui j'ai vu ça aussi mais le probleme de cast venait surtout de la:
t3=diff(&t1,&t2);
j'ai fais à la place :
struct temps *diff();
t3=diff(&t1,&t2);
En fait j'avais déjà essayé mais en faisant:
t3=struct temps *diff(&t1,&t2);
ce qui ne fonctionne pas
t3=diff(&t1,&t2);
j'ai fais à la place :
struct temps *diff();
t3=diff(&t1,&t2);
En fait j'avais déjà essayé mais en faisant:
t3=struct temps *diff(&t1,&t2);
ce qui ne fonctionne pas