Por qué fflush (stdin) no elimina el búfer (stdin) [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Utilizando fflush (stdin) 5 respuestas

Tengo un código de prueba como este

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char c, str[20];
    printf("Enter a character : ");
    scanf("%c", &c);
    printf("Enter a string : ");
    fflush(stdin);
    gets(str);
    printf("\n\n\nResult : %c\n%s\n", c, str);
    return 0;
}

He leído algunos artículos que dicen que este código funcionará porque después de escanear el carácter c, todavía hay un carácter '\ n' en el búfer. El fflush (stdin) borrará el búfer, por lo que la función gets () puede funcionar correctamente

Pero, de hecho, cuando compilo y ejecuto este código en un entorno Mac OS, fflush (stdin) no hace nada. Ingresé un carácter (por ejemplo, 'k'), luego imprime el carácter k y un carácter '\ n'. Supone permitirme ingresar un carácter, una cadena y luego imprimirlos a ambos. Alguien sabe por qué? ¡Gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta