Q:

Validação de scanf em c

Estou com um problema que preciso validar uma entrada para receber apenas inteiros, caso não receba, devo forçar o usuário a digitar um inteiro. Não posso desconsiderar números depois da virgula (no caso de decimais) e não posso retornar o equivalente inteiro de uma letra (no caso de o usuário informar letra).
    int lerInteiro();

    int main()
    {
        int numero=0;
        numero=lerInteiro();
        printf("Numero: %i .\n",numero);
        return 0;
    }

   int lerInteiro()
   {
       int numero=0;
       int flag=0;
       do
       { 
            fflush(stdin);
            puts("Digite um numero inteiro: \n");

            if(scanf("%i",&numero)!=EOF)
            {
                flag=1;
                puts("Numero invalido!\n");
                puts("Digite apenas NUMEROS\n!");
                puts("Digite apenas numeros INTEIROS!\n");
            }
            else
            flag=0;
        }while(flag==1);    
    return numero;
   }

O programa deve parar quando um numero inteiro for digitado e retornar o numero digitado.

A:

Crie uma variável float e uma inteira para comparar uma com a outra, dessa forma.
    #include<stdlib.h>
    #include<stdio.h>

    int lerInteiro();

    int main()
    {
        int numero=0;
        numero=lerInteiro();
        printf("Numero: %d .\n",numero);
        return 0;
    }

   int lerInteiro()
   {
       float numero=0;
       int flag=0;
       do
       { 
            fflush(stdin);
            puts("Digite um numero inteiro: \n");
            scanf("%f",&numero);
            int number = numero;
            if(number != numero)
            {
                flag=1;
                puts("Numero invalido!\n");
                puts("Digite apenas NUMEROS!\n");
                puts("Digite apenas numeros INTEIROS!\n");
            }
            else
            flag=0;
        }while(flag==1);    
    return numero;
   }

