[Langage C]

Résolu
jamsss -  
tatou_38 Messages postés 1937 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   50
 
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
jamsss
 
Oui, ça ne change rien...
0
ShaBoo Messages postés 392 Date d'inscription   Statut Membre Dernière intervention   50
 
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 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
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   Statut Membre Dernière intervention   50
 
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 1937 Date d'inscription   Statut Membre Dernière intervention   121 > ShaBoo Messages postés 392 Date d'inscription   Statut Membre Dernière intervention  
 
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
jamsss
 
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   Statut Membre Dernière intervention   61
 
Dans ce cas, regarde bien la différence entre ton premier scanf et le second, qui est dans la boucle... ^^
0
Jamsss
 
arffff, oui en effet c'est quelque chose que j'oublie très souvent les "&", merci à toi !
0
Jamsss
 
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   Statut Membre Dernière intervention   61
 
Mais de rien, ça me fait plaisir! ^^

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