Valide el tipo de entrada en un ciclo do-while C

Básicamente, necesito asegurarme de que la entrada sea unentero, al igual que:

do {
    printf("Enter > ");
    scanf("%d", &integer);
} while (/* user entered a char instead of an int */);

He intentado varios métodos, pero siempre termina con un error de tiempo de ejecución o un bucle infinito cuando intento ingresar unchar. Lo he sabidofflush(stdin) es un comportamiento indefinido, que es mejor no involucrarlo en mi código para evitar cualquier error másya no funciona en VS2015 por algunas razones

Los códigos a continuación son el método que he probado:

typedef enum {false, true} bool;
int ipt;
char c;
bool wrong_ipt;

do {
    c = '\0';
    printf("Enter > ");
    scanf("%d%c", &ipt, &c); //infinite loop occurs while a char has been entered
} while (c != '\n');

do {
    c = '\0';
    printf("Enter > ");
} while (scanf("%d", &ipt) != EOF);

do {
    wrong_ipt = false;
    do {
        ipt = NULL;
        printf("Enter > ");
        scanf("%d", &ipt);
        if (ipt == NULL) {
            wrong_ipt = true;
            break;
        }
    } while (ipt == NULL);
} while (wrong_ipt);

¿Hay alguna otra forma que no seafflush(stdin) que puede usarse para evitar el bucle infinito cuando el usuario ingresó unchar enC?

Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta