我尝试在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
答案 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
禁止分配。随后的转换结果将被废弃。