Problème fonction (switch, buffer)
Ruben
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'utilise dans ma fonction une fonction lire() dans un switch avec un scanf avant comme ceci :
Cela marche tant que je réponds 1 et ajoute un "fait", qui est un élément de ma liste chainée BaseFaits ayant pour valeur une chaîne de caractère.
Mais quand je sors du switch en entrant 2, mon marqueur "nouveau tour" apparaît mais pas "sortie du while" et le terminal m'affiche un segmentation fault.
Fonction lire :
et viderBuffer :
Pourriez vous m'aider ?
J'utilise dans ma fonction une fonction lire() dans un switch avec un scanf avant comme ceci :
BaseFaits creer_Bf() { int choix; BaseFaits b = nouvelle_Bf(); char buffer[101]; do { printf("(1) ajouter fait, (2) suite"); scanf("%d",&choix); switch(choix) { case 1: printf("Fait à ajouter ?"); lire(buffer); ajouter_Fait(b, buffer); break; case 2: printf("On passe à la suite\n"); } printf("nouveau tour\n"); }while(choix!=2); printf("Sortie du while"); return b; }
Cela marche tant que je réponds 1 et ajoute un "fait", qui est un élément de ma liste chainée BaseFaits ayant pour valeur une chaîne de caractère.
Mais quand je sors du switch en entrant 2, mon marqueur "nouveau tour" apparaît mais pas "sortie du while" et le terminal m'affiche un segmentation fault.
Fonction lire :
int lire(char *Buffer) { char *positionEntree = NULL; viderBuffer(); /*On lit le texte saisi au clavier */ if (fgets(Buffer, 100, stdin) != NULL) /* Pas d'erreur de saisie ? (Buffer de 100 caractères) */ { positionEntree = strchr(Buffer, '\n'); /* On recherche l'"Entrée" */ if (positionEntree != NULL) /* Si on a trouvé le retour à la ligne */ { *positionEntree = '\0'; /* On remplace ce caractère par \0 */ } else { viderBuffer(); } return 1; /* On renvoie 1 si la fonction s'est déroulée sans erreur */ } else { viderBuffer(); return 0; /* On renvoie 0 s'il y a eu une erreur */ } }
et viderBuffer :
void viderBuffer() { int c = 0; while (c != '\n' && c != EOF) { c = getchar(); } }
Pourriez vous m'aider ?
Configuration: Macintosh / Safari 14.0
A voir également:
- Problème fonction (switch, buffer)
- Fonction si et - Guide
- Android switch - Accueil - Android
- Smart switch pc - Télécharger - Divers Bureautique
- Switch off - Télécharger - Divers Utilitaires
- Logiciel switch - Télécharger - Conversion & Extraction
1 réponse
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
tu pourrais t'aider en publiant ton programme complet, et en indiquant clairement ce que tu réponds, et tout ce qui est affiché par le programme.
tu pourrais t'aider en publiant ton programme complet, et en indiquant clairement ce que tu réponds, et tout ce qui est affiché par le programme.
Voilà un exemple :
Et voici mon main :
as-tu essayé d'ajouter à la fin de chaque printf?
Du coup voici mon type abstrait BaseFaits :
Et la fonction nouvelle_Bf() utiliser au début de creer_Bf ne fait que renvoyer NULL.
as-tu testé en retirant de main() les instruction après ?