Ahora tienes una cadena de 2 posiciones y a fgets le pasas 3 como tamaño por lo tanto lee 2 caracteres, por ende es posible que la cadena te quede sin el carácter nulo.
Si el problema es solo el contenido restante en el buffer de entrada, en Windows se puede tirar de la API para solucionarlo fácilmente, pero para no salir del estándar puedes hacer algo como esto:
void CleanStdin()
{
}
Aunque no debería hacer falta puesto que el salto de linea debería quedar perfectamente en la cadena pasada a fgets siempre que le dejes espacio. Luego puedes reemplazarlo fácilmente por un carácter nulo.
Con el tema de las lecturas, hay miles de formas de leer una opción. Usualmente cuando son opciones simples con fgets + sscanf basta y sobra:
if(fgets(Buff
, sizeof Buff
, stdin
))
El problema del buffer de entrada en Windows esta muy tratado en el foro. Hoy ya vi 3 posts con la misma duda asi que mi recomendación es que utilicen el buscador del foro, ya que hay hilos enteros solo sobre este tema. Tambien con Google pueden buscar algo como:
fflush(stdin) site:foro.elhacker.net
o
fgets problema site:foro.elhacker.net
Saludos