Le programme ne fonctionne pas bien

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

  1. 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
    1. Contributeur
      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
      1. #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
      2. Contributeur
        @ABC123Les champs date et mois sont de type int. Le spécificateur de scanf() ne peut donc pas être %s
        0
    2. 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