9

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

4 回答 4

11

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

18/07/2012

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

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

23 2 1991 3 5

2(单独)被第一个消耗,%*c3(单独)被第二个消耗。

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

于 2012-07-18T13:02:56.983 回答
5

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

于 2012-07-18T13:03:38.997 回答
3

这意味着忽略下一个字符,例如空格、/-书面日期中常见的 a。

于 2012-07-18T13:03:48.860 回答
1

使用*withscanf抑制分配。随后的转换结果将被丢弃。

于 2012-07-18T13:14:14.473 回答