I typically acquire a character with %c
, but I have seen code that used %*c%c
. For example:
char a;
scanf("%*c%c", &a);
What is the difference?
I typically acquire a character with %c
, but I have seen code that used %*c%c
. For example:
char a;
scanf("%*c%c", &a);
What is the difference?
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.
Basically %c refers to the character type specifier and *%c is used to exclude one character such that the character would be read from the console but it wouldn't be assigned to any variable. for eg. -:
suppose the input is 31/12/2018 and you want to output in the form of integers only and want to exclude '/' characters then you can use %*c here as - scanf("%d%*c%d%*c%d" , &day,&month,&year);
so this way you will exclude two '/' characters.
In similar manner %*d is used to exclude one integer, %*f to exclude one float , and %*s to exclude one word of the string. Hope it helped :)