Le programme ne fonctionne pas bien

Fermé
ABC123 - Modifié le 20 sept. 2021 à 13:59
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 20 sept. 2021 à 13:55
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 lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
17 sept. 2021 à 10:41
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 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 17 sept. 2021 à 11:40
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
#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 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096 > ABC123
20 sept. 2021 à 13:55
Les champs date et mois sont de type int. Le spécificateur de scanf() ne peut donc pas être %s
0
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