Programme per afficher une date en langage C

Fermé
Sisiniya Messages postés 142 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 24 mars 2010 - 11 avril 2008 à 20:16
Sisiniya Messages postés 142 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 24 mars 2010 - 12 avril 2008 à 21:50
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+.
0
Sisiniya Messages postés 142 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 24 mars 2010 19
12 avril 2008 à 13:36
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.
0