@WhozCraig well stated shortcomings to this advice. Its comes without rational nor detail. Further it does not apply to "%s"
as "%s"
consumes leading white-space with or without a leading space.
A leading white-space, be it ' '
, '\t'
, '\n'
, etc. all do the same thing: direct scanf()
to consume and not store optional leading white-space char
. This is useful as typical usage of previous scanf()
does not consume the user's '\n'
from the Enter
scanf("%d", &some_int);
scanf("%c", &some_char); // some_char is bound to get the value '\n'
All scanf()
input specifiers ignore leading spaces, except 3: "%c"
, "%n"
, "%[]"
.
Simple directives do benefit with the leading space as in the following. Previous left-over white-space is consumed before '$'
.
int Money;
scanf(" $%d", &Money);
Often, though not always, a leading space before "%c"
is beneficial as when reading a single char
of user input.
char ch;
scanf(" %c", &ch);
What is most wrong with the advice is that 1) when using "%s"
, supplying a width parameter is essential to robust code and 2) the return value should be checked.
char buf[30];
int cnt = scanf("%29s", buf);
if (cnt != 1) Handle_NoInput_or_EOF_IOError();
Note that all the conversion specifiers except %c
, %[…]
(scan sets) and %n
skip leading white space automatically, so the advice is not really relevant with %s
, or %d
or %lf
, etc.
Lastly, I recommend using fgets()
rather than scanf()
whenever one can — which is usually the case.