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

时间:2012-07-18 13:00:24

标签: c scanf

我尝试在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);

输出

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

4 个答案:

答案 0 :(得分:8)

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

18/07/2012

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

因此,当你输入时观察到的行为:

23 2 1991 3 5

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

这是标准C而不是Turbo C的特殊功能(问题的第一版指定了,但是自从我第一次写这个答案以来,该问题已被编辑以删除对Turbo C的引用)。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

使用* scanf禁止分配。随后的转换结果将被废弃。