Programme per afficher une date en langage C

[Fermé]
Signaler
Messages postés
142
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
24 mars 2010
-
Messages postés
142
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
24 mars 2010
-
Bonjour,
Un programme en C ,qui demande à l'utilisateur d'entrer une date ( par exemple : 15 mars 2001 ) et de l'afficher en utilisant une sructure , je l'ai nommé La_date .cette sructure a 3 champs : deux de type int et le tableau mois de type char . Pour toto qui s'apparaît dans le programme , c'est un tableau dynamique contenant 5 cases et puisque il est de type La_date donc chaque case contient les trois champs précédentes.

S.V.P , regadez mes tentations et trouvez - moi où est les erreurs , sachant que lorsque je compile ce programme il me donne 0 erreur 0 Warning , mais le problème c'est dans l'affichage de la boîte Noire de l'execution!!
il me donne la main pour saisir date1 mais dès que j'appuie sur ENTRER pour me laisser saisir date 2 et ainsi de suite ... ,
il m'affiche : Veuillez saisir date2 : Veuillez saisir date3 : Veuillez sasir date4 : Veuillez saisir date5 :

Voici mon programme et Merci pour l'aide :
********************************************************************************************
#include<stdio.h>
#include<string.h>
#include<malloc.h>

typedef struct {
int jours;
char mois[9+1]; // le plus long mois est compsé par 9 caractères
int annee;
}La_date ;


int main()
{

La_date *toto;
int i ;
i = 0;

toto=malloc( 5 * sizeof(La_date));

for (i=0 ; i<4 ; i++)
{
printf("Veuillez saisir la date%d :\t",i+1);
scanf("%d %s %d ", &(toto+i)-> jours , (toto+i)->mois , &(toto+i)-> annee);
}

for(i=0;i<4;i++)
{
printf("%d %s %d " , (toto+i)-> jours , * ((toto+i)->mois) , (toto+i)-> annee);
}


free(toto);
}

3 réponses

Je viens de vérifier chez moi, aucun problème d'exécution.

((toto+i)->mois) est déja un pointeur
*((toto+i)->mois) est un pointeur de pointeur.

en laissant *((toto+i)->mois) ça affiche n'importe quoi.

Je compile avec Tubo C++ de Borland. Qu'est que tu utilises?

Jusqu'à présent je n'ai encore jamais eu de problème de compatibilité avec le code C.

vérifie que malloc est bien définie dans <malloc.h> ou <alloc.h>.

A+.
Messages postés
142
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
24 mars 2010
19
Bonjour...,
svp regardez ce que je vais écrire (mes justifications ), est ce que c'est juste ou non !

Pour (toto+i)->mois :

toto+i est un pointeur c'est pour cela on met '->' , et mois aussi est un pointeur. dans printf là où j'ai écrit
*((toto+i)->mois ) , je m'intéresse sur le champs ciblé ( le champs ici c'est mois )! , et puisque mois est un pointeur et je veux afficher sa valeur donc j'utilise ' * ' devant mon pointeur. le probléme peut -être , comment peux-je placer cette '* ' dans l'endroit adéquat ? est ce comme ça (toto+i)-> * mois (ce que je crois pas) ou bien
*(toto+i)->mois ( mais dans ce qu'à est ce qu'il va prendre *(toto+i) comme la valeure du toto+i , ce que je veux pas)
ou bien je l'écris comme * ((toto+i) ->mois) ( en désignant par cette expression la valeur du champs nommé mois qui se trouve dans la structure toto+i).

Je compile par Microsoft Visual C++ , mais je travaille avec des programmes qui utilisent malloc.h et je n'est eu des erreurs
sauf dans ce programme qui va me rendre folle. ça me fait une semaine et plus que je cherche où est chez moi le probléme mais vainement domage!!

En faite Amigo , je vous remercie une 2ém fois pour vos lecture ansi que votre réponse sur mes questions.
Bonjour,

Je suis désolé de ne pas pouvoir te donner un cours magistral sur les pointeurs, j'espère qu'une personne plus compétente que moi dans ce forum pourra le faire.

Je sais que les tableaux de char sont des variables particulières interprétées automatiquement comme des pointeurs.
La correction que j'ai proposé vient de l'expérimentation: dans un cas ça marche, dans l'autre non.

Tout ce que je pourrait dire de plus ne servira qu'à t'embrouiller, tout comme je l'ai été par ton précédent message.

S'il vous plait, quelqu'un pourrait-il venir en aide à Sisiniya ?

Merci.
Messages postés
142
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
24 mars 2010
19
Bonsoir,
Le faite de me répondre c'est déjà un aide pour moi même si le problème n'est pas encore résolu.
Je vous remercie infiniment Amigo pour Vos réponses, en espérant de voire une participation des autres Membres !

Merci ...

Sisiniya
Bonsoir,

Ton prog corrigé que j'ai executé chez moi avec succes.

#include<stdio.h>
#include<string.h>
#include<alloc.h> //je n'avais pas malloc.h

typedef struct {
int jours;
char mois[9+1]; // le plus long mois est compsé par 9 caractères
int annee;
}La_date ;


int main()
{

La_date *toto;
int i ;
i = 0;

toto=malloc( 5 * sizeof(La_date));

for (i=0 ; i<4 ; i++)
{
printf("Veuillez saisir la date%d :\t",i+1);
scanf("%d %s %d", &(toto+i)-> jours , (toto+i)->mois , &(toto+i)-> annee);
}

for(i=0;i<4;i++)
{
/* j'ai remplacé *((toto+i)->mois) par ((toto+i)->mois) */
printf("%d %s %d\n" , (toto+i)-> jours , ((toto+i)->mois) , (toto+i)-> annee);
}

getch(); /*pour suspendre le programme jusqu'a l'appui sur une touche*/
free(toto);
return 0; /* int main() est sensé retourner un entier */
}

A+.
Messages postés
142
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
24 mars 2010
19
Bonsoir,
Je vous remercie Amigo pour la réponse , j'ai essayé avec ce programme mais les mêmes erreurs ont été produit, donc le problème n'est pas encor réglé. En faite, S'il vous plaît , veuillez m'expliquer pour quelle raison vous avez remplacé
*((toto+i)->mois) par ((toto+i)->mois) ?? .[ cette dernière ((toto+i)->mois) est la même que (toto+i)->mois ]