Ok, my revised answer. sscanf didn't behave as I thought, and strtol provides the best C-like solution that is very portable.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
for (int i=1; i < argc; i++){
char* end;
long val = strtol(argv[i], &end, 10);
if (argc >= 2 && !end[0] && val >= 0){
printf("%s is valid\n", argv[i]);
} else {
printf("%s is invalid\n", argv[i]);
}
}
return 0;
}
Example output :. /a.out 10 -1 32 1000 f -12347 +4 --10 10rubb
10 is valid
-1 is valid
32 is valid
1000 is valid
f is invalid
-12347 is valid
+4 is invalid
--10 is invalid
10rubbish is invalid
, strtol int. , end [0] , , 10rubbish, , 10. , , , 0 .
atoi() , . 0 .
sscanf() , , 10rubbish, 10.
, op argv [1], , .