Yo usaría:
#include <stdio.h>
int main()
{
signed int n;
char buffer[100];
do
{
fgets(buffer
, 99, stdin
); } while(sscanf(buffer
, "%d", &n
) != 1); return 0;
}
#include <stdio.h>
void error(void)
{
puts("Error en la captura de datos."); }
int main(void)
{
signed int correcto = 1, n;
char buffer[100];
do
{
correcto = 1;
fgets(buffer
, 100, stdin
); if(sscanf(buffer
, "%d", &n
) != 1) {
error();
correcto = 0;
}
} while(correcto != 1);
return 0;
}