What is the difference between %*c%c and %c as a format specifier to scanf?
In a scanf
format string, after the %
, the *
character is the assignment-suppressing character.
In your example, it eats the first character but does not store it.
For example, with:
char a;
scanf("%c", &a);
If you enter: xyz\n
, (\n
is the new line character) then x
will be stored in object a
.
With:
scanf("%*c%c", &a);
If you enter: xyz\n
, y
will be stored in object a
.
C says specifies the *
for scanf
this way:
(C99, 7.19.6.2p10) Unless assignment suppression was indicated by a *, the result of the conversion is placed in the object pointed to by the first argument following the format argument that has not already received a conversion result.
According to Wikipedia:
An optional asterisk (*) right after the percent symbol denotes that the datum read by this format specifier is not to be stored in a variable. No argument behind the format string should be included for this dropped variable.
It is so you can skip the character matched by that asterisk.