While reading a %d integer value into scanf, is there a way to restrict or check input so that invalid input like characters won't mess up the program?
While reading a %d integer value into scanf, is there a way to restrict or check input so that invalid input like characters won't mess up the program?
I think that is rightCode:if(scanf("%d",&var) != 2) { ... //var is not 2 }
Close. From the man page:Originally Posted by sand_man
In the above case, if the return value was 1, it would mean that you sucessfully scanned in one item, which would be what you want for the above code.RETURN VALUES
These functions return the number of input items assigned,
which can be fewer than provided for, or even zero, in the
event of a matching failure. Zero indicates that, while
there was input available, no conversions were assigned;
typically this is due to an invalid input character, such
as an alphabetic character for a `%d' conversion. The
value EOF is returned if an input failure occurs before
any conversion such as an end-of-file occurs. If an error
or end-of-file occurs after conversion has begun, the num-
ber of conversions which were successfully completed is
returned.
Quzah.
Hope is the first step on the road to disappointment.
Of course, you then realise that if the user messed it up, scanf() leaves a pile of trash on the input stream which you still have to get rid of, and then you realise that fgets() and sscanf() would have been a better approach.
If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
If at first you don't succeed, try writing your phone number on the exam paper.