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

10

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

如果他想要丢弃接下来的三个字符怎么办? - huseyin tugrul buyukisik
2
@tuğrulbüyükışık: 你可以使用“%*3c”来指定要跳过的字符数。 - Jonathan Leffler
4个回答

14

scanf("%*d%s", str);

18/07/2012

并正确解释日期中的日(18)、月(7)和年(2012)是如何转换的。格式字符串中的空格至关重要,使事情变得复杂了。通常,%c 读取下一个字符,甚至包括空格,但围绕 %*c 转换说明符的空格处理空格,所以代码需要一个非空白字符来消耗。

因此,当您输入以下内容时:

23 2 1991 3 5

第一个 %*c 消耗了 2(独立的数字),第二个消耗了 3(独立的数字)。这是标准 C 的行为,而不是 Turbo C 特有的(原问题指定了 Turbo C,但问题已经被编辑掉了)。


我想我不知道这个。无论如何,谢谢! - Piyp791

6
在格式字符串中,%后面的*表示匹配该格式的输入将被忽略(因此无需传递指向变量以存储您不打算使用的匹配值)。

3
这意味着忽略下一个字符,如空格、/或日期中常见的-

1

在使用scanf时,使用*可以抑制赋值操作。随后的转换结果将被丢弃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接