### Question 12.19

I figured I could use `scanf` more safely if I checked its return value to make sure that the user typed the numeric values I expect, but sometimes it seems to go into an infinite loop.

When `scanf` is attempting to convert numbers, any non-numeric characters it encounters terminate the conversion and are left on the input stream. Therefore, unless some other steps are taken, unexpected non-numeric input ``jams'' `scanf` again and again: `scanf` never gets past the bad character(s) to encounter later, valid data. If the user types a character like ``x`' in response to a numeric `scanf` format such as `%d` or `%f`, code that simply re-prompts and retries the same `scanf` call will immediately reencounter the same ``x`'.

See also question 12.20.

References: ANSI Sec. 4.9.6.2
ISO Sec. 7.9.6.2
H&S Sec. 15.8 pp. 357-64

Read sequentially: prev next up top

This page by Steve Summit // Copyright 1995 // mail feedback