Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 output.

#include<stdio.h> int main() {         int i;         char str[1024];          printf("Enter text: ");         scanf("%*s", &str);         printf("%s\n", str);          printf("Enter interger: ");         scanf("%*d", &i);         printf("%d\n", i);         return 0; } 

Output:

manav@workstation:~$ gcc -Wall -pedantic d.c d.c: In function ‘main’: d.c:8: warning: too many arguments for format d.c:12: warning: too many arguments for format manav@manav-workstation:~$ ./a.out Enter text: manav D Enter interger: 12345 372 manav@workstation:~$ 
like image 254
manav m-n Avatar asked Jan 28 '10 15:01

manav m-n


1 Answers

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.

like image 170
Håvard S Avatar answered Sep 23 '22 09:09

Håvard S