C 中 scanf() 中的格式化字符串

Formatted string in scanf() in C

就像 printf() 一样,我试图在 scanf() 格式字符串中使用可选说明符。我尝试使用宽度和精度说明符。现在在 printf() 中,它只是保留列并根据这些说明符打印,但是 scanf() 会发生什么?比如这里的 %3d%3.3f 是什么意思?这在 scanf() 的情况下是否相关?我有一点想法,在这种情况下,宽度表示要为某种特定格式读取但不确定的字符数。下面的代码进一步解释了这一点:

#include<stdio.h>
int main()
{
int a;
float b;
printf("Enter Numbers:\n");
scanf("%3d %3.3f",&a,&b);
printf("Entered Numbers are\n");
printf("%d %f",a,b);
return 0;
}

因为你在评论中指定你真正想知道的是'如果我强行尝试这样做会怎样'...这是结果(铿锵)

warning: invalid conversion specifier '.'

warning: data argument not used by format string

程序编译,但是,因为这些只是警告。

执行二进制文件并输入要求的变量时:

  1. a"%d" 已正确存储。
  2. 无论输入什么值,b" %3.3f " 总是存储 0.000000

简而言之,它所做的几乎与任何其他编译时带有警告的代码所做的一样 - 未按预期运行。这既不是未定义的,也不是未指定的行为,但它是错误的

建议:不要问“如果我尝试编译这个会发生什么”这样的问题。自己试试吧!