Le programme ne fonctionne pas bien

ABC123 -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,


#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

Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 
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;
}
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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 comme
char 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 type
char nom[256];
permet de stocker une chaîne de 255 char, plus le
'\0'
terminal.

Les spécificateurs de
scanf()
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
0
ABC123
 
#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 ?
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105 > ABC123
 
Les champs date et mois sont de type int. Le spécificateur de scanf() ne peut donc pas être %s
0
ABC123
 
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 .
0