Dlaczego fflush (stdin) nie usuwa bufora (stdin) [duplikat]

To pytanie ma już odpowiedź tutaj:

Using fflush (stdin) 5 odpowiedzi

Mam taki kod testowy

#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;
}

Przeczytałem kilka artykułów o tym, że ten kod będzie działał, ponieważ po zeskanowaniu znaku c, w buforze nadal znajduje się znak „\ n”. Fflush (stdin) wyczyści bufor, więc funkcja gets () może działać poprawnie

Ale w rzeczywistości, kiedy kompiluję i uruchamiam ten kod w środowisku Mac OS, fflush (stdin) nic nie robi. Wprowadziłem znak (np. „K”), a następnie wypisałem znak k i znak „\ n”. Ma to pozwolić mi wprowadzić znak, ciąg, a następnie wydrukować oba z nich. Czy ktoś wie dlaczego? Dzięki

questionAnswers(2)

yourAnswerToTheQuestion