Часто бывает проще обрабатывать ввод в виде строки символов, даже при приеме численного ввода от пользователя, а затем преобразовать строку в число:
#include<stdio.h>
int main (void) {
char buf[32] = {0};
int num = -1;
while (num < 0) {
printf (" Enter a positive number: ");
if (scanf (" %[^\n]%*c", buf) == 1) {
if (*buf < '0' || *buf > '9') continue;
sscanf (buf, " %d", &num);
}
}
printf ("\n You entered : %d\n\n", num);
return 0;
}
Выход
$ ./bin/positive_entry
Enter a positive number: --1--1 1--1
Enter a positive number: #%@#&%$ u08$
Enter a positive number: wise guys^2
Enter a positive number: -127
Enter a positive number: -3
Enter a positive number: a
Enter a positive number: 2
You entered : 2
numOfDef> 0 в точности противоположно тому, что вам нужно, попробуйте с numOfDef <1 –