Le programme ne fonctionne pas bien
ABC123
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Merci d'avance .
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int jour;
int mois;
int annee;
}Datenaissance;
typedef struct{
char nom;
char prenom;
Datenaissance date;
}Stagiaire;
int main(int argc, char *argv[]) {
Stagiaire s;
printf("nom : ");
scanf("%s",s.nom);
printf("prenom : ");
scanf("%s",s.prenom);
printf("jour : ");
scanf("%d",&s.date.jour);
printf("mois : ");
scanf("%s",&s.date.mois);
printf("annee : ");
scanf("%s",&s.date.annee);
printf("Les informations du stagiaire : \n");
printf("Nom : %s\n Prenom : %s \n Date de naissance : %d/%d/%d ",s.nom,s.prenom,s.date.jour,s.date.mois,s.date.annee);
return 0;
}
Merci d'avance .
3 réponses
-
Bonjour,
et pourquoi il ne fonctionne pas bien ?
ca donne quoi ?
tu as un message d'erreur ?
sinon, pour plus de clarté il faut afficher ton code avec les balises
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :
#include <stdio.h> int main(){ printf("Hello World!"); return 0; } -
Salut ABC123,
Poste ton code correctement, comme te l'indique Phil_1857.
Deux problèmes essentiellement, se retrouvent tout au long du code posté.
Un type commechar nom;
ne permet de stocker qu'un seul char, pas une chaîne de caractères.
Pour stocker une chaîne de caractères il faut un espace de stockage suffisant pour y mettre des chars consécutifs constituant la chaîne y compris le'\0'
terminal. Par exemple un typechar nom[256];
permet de stocker une chaîne de 255 char, plus le'\0'
terminal.
Les spécificateurs descanf()
doivent correspondre aux types des emplacements mémoire où ils doivent être stockés. Là tu utilises systématiquement %s, qui est correct si tu récupères des chaînes de caractères s'arrêtant au première caractère blanc, mais c'est %d que tu dois utiliser pour récupérer un int.
https://www.cplusplus.com/reference/cstdio/scanf/
Dal-
#include <stdio.h> #include <stdlib.h> typedef struct{ int jour; int mois; int annee; }Datenaissance; typedef struct{ char nom[12]; char prenom[12]; Datenaissance date; }Stagiaire; int main(int argc, char *argv[]) { Stagiaire s; printf("nom : "); scanf("%s",s.nom); printf("prenom : "); scanf("%s",s.prenom); printf("jour : "); scanf("%d",&s.date.jour); printf("mois : "); scanf("%s",&s.date.mois); printf("annee : "); scanf("%s",&s.date.annee); printf("Les informations du stagiaire : \n"); printf("Nom : %s\n Prenom : %s \n Date de naissance : %d/%d/%d ",s.nom,s.prenom,s.date.jour,s.date.mois,s.date.annee); return 0; }
Comme ça ?
-
-
Merci infiniment pour ton explication, le problème été dans la déclaration, je savais pas que je suis obliger de faire des [ ] après le nom de la variable pour stocker une chaine comme vous avez dit, mais je savais pas comment faire pour écrire mon code correctement .