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
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
A voir également:
- Problème d'affichage simple en c
- Iphone 14 simple - Guide
- Simple ocr - Télécharger - Bureautique
- Simple file locker - Télécharger - Sécurité
- Affichage double ecran - Guide
- Problème affichage fenêtre windows 10 - Guide
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
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 :
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; }