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

标签 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

最佳答案

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

18/07/2012

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

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

23 2 1991 3 5

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

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

关于c - scanf() 中的 %*c - 这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542010/

相关文章:

c - 负值左移 0 个位置?

c - 从文件数据打印星号

c - 为什么我的程序在使用 scanf 后暂停?

C - 使用 scanf 问题查找最大、最小和平均值

c - C中的无限循环

c - #定义相关查询

c - 通过复制边值来填充矩阵

c - 如何将字符串类型转换为具有不同大小的 char 数组成员的结构?

c - sscanf 显示随机字符

c - C 中 scanf 的奇怪行为