什么是scanf(“%* s”)和scanf(“%* d”)格式标识符?
 scanf()中格式"%*"的实际用法是什么? 如果这种格式存在,那么背后就有一定的目的。 下面的程序给出了奇怪的输出。 
 #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; } 
输出:
 manav@workstation:~$ gcc -Wall -pedantic dc dc: In function 'main': dc:8: warning: too many arguments for format dc:12: warning: too many arguments for format manav@manav-workstation:~$ ./a.out Enter text: manav D Enter interger: 12345 372 manav@workstation:~$ 
	
 对于printf,*允许你通过一个额外的参数来指定最小的字段宽度,例如printf("%*d", 4, 100); 指定一个4的字段宽度。 
 对于scanf ,*表示该字段将被读取,但被忽略,因此,即input“12 34”的scanf("%*d %d", &i)将忽略12并将其读入整数i。 
星号是一个标志字符,它表示忽略规范所读取的文本。 从glibc文档中input:
一个可选的标志字符“*”,它表示忽略为这个规范读取的文本。 当scanffind一个使用该标志的转换规范时,它按照转换规范的其余部分读取input,但是它放弃了这个input,不使用指针参数,也不增加成功赋值的次数。
 当规范string包含多个元素时,例如: "12 test 34" scanf("%d %*s %d", &i, &j) – 这里i & j是整数,希望忽略其余的。 
看到这里
一个可选的起始星号表示数据将从标准input中被检索,但被忽略,即它不被存储在相应的参数中。
  *用于跳过input,而不用将其放入任何variables中。 所以scanf("%*d %d", &i); 会读两个整数,并把第二个在i 。 
 代码中输出的值只是未初始化的ivariables中的值 –  scanf调用不会改变它。 
 在scanf("%*d",&a) *跳过input。 为了读取input,必须在scanf使用额外的"%d" 。 例如: 
  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 
 如果您使用另一个%d即: scanf("%d %*d %d %d",&a,&b,&c); //input is given as: 10 20 30 40  scanf("%d %*d %d %d",&a,&b,&c); //input is given as: 10 20 30 40然后a = 10 b = 30 c = 40。 
 如果你在scanf中使用","那么在%*d ie之后没有值。  scanf("%d %*d,%d" &a,&b,&c)// 10 20 30 O / p:a = 10 b = 2 c = 3将成为输出。