blog/_posts/2015-04-15-impossibilite-de...

18 lines
1.0 KiB
Markdown

---
title: "Impossibilité de gets() après scanf() ? - C"
date: 2015-04-15
url: impossibilite-de-gets-apres-scanf-c
layout: post
category: Programming
---
[![A missing blog post image](/img/blog/impossibilite-de-gets-apres-scanf-c.png)](/img/blog/impossibilite-de-gets-apres-scanf-c.png)
Tout le monde sait à quel point `gets()` n'est vraiment pas une fonction "fiable", mais personnellement, je pensais qu'il y avait des limites...
Si vous faites un basique `scanf()`, suivi d'un `gets()` (et même dans une autre fonction), votre `gets()` sera juste ignoré.
Apparemment, c'est au niveau du caractère de fin de chaîne lors de la saisie de votre `scanf()` qui serait pris en compte lors de l'appel du `gets()`, et donc causant son arrêt immédiat. Pour lui, la saisie de sa chaîne est terminée, car il tombe sur le caractère `\n` généré par le `scanf()` immédiatement à la fin du buffer.
L'astuce est donc de récupérer ce caractère ci à l'aide d'une fonction type `getchar()`, juste après l'appel du `scanf()`.