What is the practical use of the formats \"%*\"
in scanf(). If this format exists, there has to be some purpose behind it. The following program gives weird out
The *
is used to skip an input without putting it in any variable. So scanf("%*d %d", &i);
would read two integers and put the second one in i
.
The value that was output in your code is just the value that was in the uninitialized i
variable - the scanf call didn't change it.
The star is a flag character, which says to ignore the text read by the specification. To qoute from the glibc documentation:
An optional flag character `*', which says to ignore the text read for this specification. When scanf finds a conversion specification that uses this flag, it reads input as directed by the rest of the conversion specification, but it discards this input, does not use a pointer argument, and does not increment the count of successful assignments.
It is useful in situations when the specification string contains more than one element, eg.:
scanf("%d %*s %d", &i, &j)
for the "12 test 34"
- where i & j are integers and you wish to ignore the rest.
See here
An optional starting asterisk indicates that the data is to be retrieved from stdin but ignored, i.e. it is not stored in the corresponding argument.
In scanf("%*d",&a)
*
skips the input. In order to read the inputs one has to use an extra "%d"
in scanf
. For example:
int a=1,b=2,c=3;
scanf("%d %*d %d",&a,&b,&c); //input is given as: 10 20 30
O/p:
a=10 b=30 and c=3; // 20 is skipped
If you use another %d
i.e: scanf("%d %*d %d %d",&a,&b,&c); //input is given as: 10 20 30 40
then a=10 b=30 c=40.
If you use ","
in scanf then no value will be taken after %*d
i.e;
scanf("%d %*d,%d" &a,&b,&c)// 10 20 30
O/p:
a=10 b=2 c=3 will be the output.
For printf, the * allows you to specify the minimum field width through an extra parameter, e.g. printf("%*d", 4, 100);
specifies a field width of 4. A field width of 4 means that if a number takes less than 4 characters to print, space characters are printed until the field width is filled. If the number takes up more space than the specified field width, the number is printed as-is with no truncation.
For scanf
, the * indicates that the field is to be read but ignored, so that e.g. scanf("%*d %d", &i)
for the input "12 34" will ignore 12 and read 34 into the integer i.