【问题标题】:%*c in scanf() - what does it mean?scanf() 中的 %*c - 这是什么意思?
【发布时间】:2012-07-18 13:00:23
【问题描述】:

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

【问题讨论】:

  • 如果他想丢弃接下来的 3 个字符怎么办?
  • @tuğrulbüyükışık:您可以使用%*3c 指定要跳过的字符数。

标签: c scanf


【解决方案1】:

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

18/07/2012

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

因此在您输入时观察到的行为:

23 2 1991 3 5

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

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

【讨论】:

  • 我想我不知道这个。无论如何谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      *scanf 一起使用会抑制分配。随后的转换结果将被丢弃。

      【讨论】:

        猜你喜欢
        • 2015-07-15
        • 1970-01-01
        • 2011-02-09
        • 2014-04-15
        • 2021-04-22
        • 2023-03-15
        • 2018-08-28
        • 2012-05-04
        • 2013-05-16
        相关资源
        最近更新 更多