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 -
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
#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:
- Problème d'affichage simple en c
- 14 simple - Guide
- Simple pdf - Télécharger - PDF
- Affichage double ecran - Guide
- Simple ocr - Télécharger - Bureautique
- Problème affichage fenêtre windows 10 - Guide
1 réponse
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 :
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 :
Et vôtre code devient :
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;
}