What are scanf(“%*s”) and scanf(“%*d”) format identifiers?

前端 未结 5 469
太阳男子
太阳男子 2020-11-30 21:26

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

相关标签:
5条回答
  • 2020-11-30 21:51

    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.

    0 讨论(0)
  • 2020-11-30 21:53

    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.

    0 讨论(0)
  • 2020-11-30 21:53

    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.

    0 讨论(0)
  • 2020-11-30 21:56

    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.

    0 讨论(0)
  • 2020-11-30 22:05

    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.

    0 讨论(0)
提交回复
热议问题