Problème d'affichage simple en c

Fermé
supermidou Messages postés 7 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 6 avril 2011 - 6 avril 2011 à 18:58
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 7 avril 2011 à 01:18
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

A voir également:

1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 7/04/2011 à 01:19
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