[Langage C]

Résolu/Fermé
jamsss - 5 sept. 2009 à 11:32
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 - 6 sept. 2009 à 16:39
Bonjour,

Je suis débutant en C et j'ai un petit soucis quand j'essaye de compiler ceci:

#include <stdio.h>

struct temps
{
int heure;
int minute;
int seconde;
};
main()
{
struct temps t;
entree(t.heure,t.minute,t.seconde);
sortie(t.heure,t.minute,t.seconde);
}

entree(t.heure,t.minute,t.seconde)
{
printf("Entrez un temps : ");
scanf("%i h %i mn %i sec",t.heure,t.minute,t.seconde);
while (t.heure<0 || t.heure>23 || t.minute<0 || t.minute>59 || .seconde<0 || t.seconde>59)
{
printf("Temps invalide...Veuillez recommencer...");
scanf("%i h %i mn %i sec",t.heure,t.minute,t.seconde);
}
}

sortie(t.heure,t.minute,t.seconde)
{
printf("%i h %i mn %i sec",t.heure,t.minute,t.seconde);
}


j'ai les erreurs suivantes avec gcc:

D6.2.c:16: erreur: expected ‘)’ before ‘.’ token
D6.2.c:27: erreur: expected ‘)’ before ‘.’ token

J'ai essayé plein de solutions mais la je comprends plus rien ;(
Merci d'avance de votre aide
A voir également:

8 réponses

ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
5 sept. 2009 à 11:41
Bonjour,

as tu pensé à caster tes prototypes de fonction :

void sortie(t.heure,t.minute,t.seconde)
{
printf("%i h %i mn %i sec",t.heure,t.minute,t.seconde);
}

?
0
Oui, ça ne change rien...
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
5 sept. 2009 à 12:17
En fait c'est ton passage de paramètres dans tes prototypes qui n'est pas correcte. Tu utilises des éléments de structure comme définition de paramètres et là gcc yen a pas vouloir comprendre ce que sait.

Essaye ceci :

entree(heure,minute,seconde)
{
printf("Entrez un temps : ");
scanf("%i h %i mn %i sec",heure,minute,seconde);
while (heure<0 || heure>23 || minute<0 || minute>59 || seconde<0 || seconde>59)
{
printf("Temps invalide...Veuillez recommencer...");
scanf("%i h %i mn %i sec",heure,minute,seconde);
}
}
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121
5 sept. 2009 à 12:30
entree(t.heure,t.minute,t.seconde) ==> il faut passer tes paramètres par adresse et non par valeur et en passant la structure et non ses membres (le jour où tu auras des structures avec 100 membres tu aprécieras !) . En tous ta syntaxe est incorrecte.

Déclaration de ta structure :
struct {
int heure;
int minute;
int seconde;
} tTemps;


int entree( tTemps *T) {
T->heure = 12;
T->minute = 45;
T->seconde = 36
}

Tu déclare un objet de type tTemps :

tTemps MonTemps;

et tu appèle la fonction par :

rc = entree( &MonTemps )

printf( "MonTemps est : %02d:%02d:%02d\n" , MonTemps.heure , MonTemps.minute , MonTemps.seconde );


Voilà !

PS : je crains que tu doives ignorer les autres réponses qui ont l'air fantaisistes !
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
5 sept. 2009 à 13:33
oO

amha ce qui peut paraître fantaisiste c'est de donner une ferrari à quelqu'un qui n'as pas encore son permis de conduire ...

Un petit manque d'humilité ???
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 121 > ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009
6 sept. 2009 à 16:39
Il vaut mieux présenter une ferrari en état de marche qu'une deudeuche pourrave.

Je pense que pour l'internaute qui veux apprendre, autant qu'il voie les bonnes techniques plutôt que de lui faire corriger une structure de programme qui ne tient pas la route.

Enseigner c'est tirer les élèves vers le haut !
0
Shaboo, ça ne marche pas ta solution, si je fais ce que tu dis les variables heure, minute et seconde ne sont pas déclarés dans mes fonctions entree() et sortie()


Merci tatoo_38 ça fonctionne j'ai fait ça:

#include <stdio.h>

struct temps
{
int heure;
int minute;
int seconde;
};
main()
{
struct temps t;
entree(&t);
sortie(&t);
}

entree(struct temps *t)
{
printf("Entrez un temps : ");
scanf("%i h %i mn %i sec",&(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 h %i mn %i sec",t->heure,t->minute,t->seconde);
}
}

sortie(struct temps *t)
{
printf("%i h %i mn %i sec",t->heure,t->minute,t->seconde);
}

Par contre maintenant j'ai une erreur de segmentation, si je rentre 2 temps invalides à la suite, le premier c'est bon , le deuxième non...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
theRedCat Messages postés 31 Date d'inscription mercredi 29 octobre 2008 Statut Membre Dernière intervention 23 janvier 2010 61
5 sept. 2009 à 15:25
Dans ce cas, regarde bien la différence entre ton premier scanf et le second, qui est dans la boucle... ^^
0
arffff, oui en effet c'est quelque chose que j'oublie très souvent les "&", merci à toi !
0
arffff, oui en effet c'est quelque chose que j'oublie très souvent les "&" j'avoue que j'avais pas trop cherché sur le coup, merci à toi !
0
theRedCat Messages postés 31 Date d'inscription mercredi 29 octobre 2008 Statut Membre Dernière intervention 23 janvier 2010 61
5 sept. 2009 à 19:00
Mais de rien, ça me fait plaisir! ^^

PS: met ton sujet en "résolu". ;)
0