Cuidado, que en ese link dan 2 soluciones para limpiar el buffer, pero una de ellas, la que usa fseek, es casi tan mala como fflush(stdin). La verdad es que esa opción también es bastante antigua, y su problema es que parte de una premisa incorrecta: que stdin es un archivo, lo cual es falso. Lo tratamos como un archivo, pero en general, cuando nos referimos a la terminal (línea de comandos) no lo es.
La cuestión es que, en algunos sistemas stdin permite hacer búsquedas (fseek) y en otros no. Esa solución puede funcionar en Windows, igual que fflush(stdin) (aunque no hay garantía de que siempre lo haga... igual que fflush(stdin)), pero va a fallar en otros sistemas operativos, como Linux (igual que... creo que el punto está claro). De hecho, hasta hay documentación que lo dice. En Linux y algunos otros sistemas tipo Unix, la implementación de fseek llama internamente a la función del sistema lseek. La
documentación oficial dice sobre esa función:
On Linux, using lseek() on a terminal device fails with the error ESPIPE.
Es decir, que usar lseek (y por lo tanto, fseek) en una terminal falla con el error ESPIPE.
Así que para limpiar el buffer lo mejor son las alternativas que te propusieron (getchar,() fgetc(stdin)), o la primera que aparece en ese link:
while((c = getchar()) != '\n')
Eso sí, mejor usar '\n', como te lo puse, que 0xA, que es lo que ponen en el link.