scanf()中的%* c – 这是什么意思?

我试图在Turbo C中运行该程序,但无法解密输出。 这个%*c是什么意思? 任何帮助,将不胜感激。

 int dd,mm,yy; printf("\n\tEnter day,month and year"); scanf("%d %*c %d %*c %d",&dd,&mm,&yy); // what does %*c mean ? printf("\n\tThe date is : %d %d %d",dd,mm,yy); 

OUTPUT

 Enter day, month and year 23 2 1991 3 5 The date is: 23 1991 5 

scanf()格式的*表示’读取数据但不将其分配给参数列表中的变量’。 在上下文中,这意味着您可以键入:

 18/07/2012 

并正确解释当天(18),月(7)和年(2012)。 格式字符串中的空格是至关重要的,并使事情变得复杂。 通常, %c读取下一个字符,甚至是空格,但%*c转换说明符周围的空格处理空格,因此代码需要使用非空字符。

因此,当您键入时观察到的行为:

 23 2 1991 3 5 

第一个%*c消耗2(单独),第二个消耗3(单独)。

这是标准C,而不是Turbo C的特殊function(问题的第一版指定,但问题已被编辑,以便在我第一次写这个答案后删除对Turbo C的引用)。

格式字符串中的* after %表示将忽略与格式匹配的输入(因此无需传入指向变量的指针来存储您不会使用的匹配值)。

它意味着忽略下一个字符,例如空格, /-在书面日期中很常见。

使用* with scanf抑制赋值。 随后的转换结果将被丢弃。