Лучше читать полную строку, используя fgets()
, а затем проверять ее, а не пытаться разобрать «на лету» из входного потока.
Легче игнорировать недействительные input.
Используйте fgets()
, а затем просто strtol()
, чтобы преобразовать в число, это позволит легко увидеть, есть ли завершающие данные после номера.
Например:
char line[128];
while(fgets(line, sizeof line, stdin) != NULL)
{
char *eptr = NULL;
long v = strtol(line, &eptr, 10);
if(eptr == NULL || !isspace(*eptr))
{
printf("Invalid input: %s", line);
continue;
}
/* Put desired processing code here. */
}