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
程序编译,但是,因为这些只是警告。
执行二进制文件并输入要求的变量时:
a
的 "%d"
已正确存储。
- 无论输入什么值,
b
的 " %3.3f "
总是存储 0.000000
简而言之,它所做的几乎与任何其他编译时带有警告的代码所做的一样 - 未按预期运行。这既不是未定义的,也不是未指定的行为,但它是错误的。
建议:不要问“如果我尝试编译这个会发生什么”这样的问题。自己试试吧!
就像 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
程序编译,但是,因为这些只是警告。
执行二进制文件并输入要求的变量时:
a
的"%d"
已正确存储。- 无论输入什么值,
b
的" %3.3f "
总是存储0.000000
简而言之,它所做的几乎与任何其他编译时带有警告的代码所做的一样 - 未按预期运行。这既不是未定义的,也不是未指定的行为,但它是错误的。
建议:不要问“如果我尝试编译这个会发生什么”这样的问题。自己试试吧!