Problème d'affichage simple en c

supermidou Messages postés 11 Statut Membre -  
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct
{
char cIn[7];

char diagnostic[100];
}fiche_diag;

int main()
{
fiche_diag f_d;

printf("\n\tCIN : ");
fflush(stdin);
scanf("%s",f_d.cIn);

printf("donner diagnostic");
fflush(stdin);
scanf("%s",f_d.diagnostic);

printf("%s",f_d.cIn);

return 0;
}

le problème c 'est que cIn prend comme valeur la concaténation des deux chaines cIn et diagnostic!!!!
comment faire !!!!
et merci d'avance

1 réponse

  1. Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
     
    Bonjour,
    Il y a un risque de dépassement si vous ne préciser pas le nombre de char max que scanf doit prendre :
    scanf("%6s",f_d.cIn); //pour 6 char
    mais le prochain scanf va prendre ce qui dépasse...
    exemple :
    #include <stdio.h>  
    int main(void)  
    {  
        char chaine1[7],chaine2[100];  
        printf("ecrire un truc : ");  
        scanf("%6s",chaine1);  
        printf("affiche chaine1 : %s\n",chaine1);  
        printf("ecrire un truc : ");  
        scanf("%s",chaine2);  
        printf("affiche chaine2 : %s\n",chaine2);  
        return 0;  
    }

    si la première chaine fait 7 char le prochain scanf mange le caractère avec le retour à ligne. Problème de dépassement est résolu mais pas l'affichage faut vider avant le prochain scanf donc simplement en ajoutant :
    while(getchar()!='\n');
    comme le scanf laisse le saut de ligne, que ça dépasse ou non ça fonctionnera! Donc l'exemple du dessus devient :
    #include <stdio.h>  
    int main(void)  
    {  
        char chaine1[7],chaine2[100];  
        printf("ecrire un truc : ");  
        scanf("%6s",chaine1);  
        printf("affiche chaine1 : %s\n",chaine1);  
        while(getchar()!='\n');  
        printf("ecrire un truc : ");  
        scanf("%s",chaine2);  
        printf("affiche chaine2 : %s\n",chaine2);  
        return 0;  
    }


    Et vôtre code devient :
    #include <stdio.h>  
    #include <string.h>  
    #include <stdlib.h>  
    
    typedef struct  
    {  
        char cIn[7];  
        char diagnostic[100];  
    }fiche_diag;  
    
    int main()  
    {  
        fiche_diag f_d;  
        printf("CIN : ");  
        scanf("%6s",f_d.cIn);  
        while(getchar()!='\n');  
        printf("donner diagnostic : ");  
        scanf("%s",f_d.diagnostic);  
        printf("%s\n",f_d.cIn);  
        return 0;  
    }  
    
    0