gpt4 book ai didi

c - 带有格式化 float 的 scanf

转载 作者:行者123 更新时间:2023-11-30 15:30:26 26 4
gpt4 key购买 nike

以下代码似乎给出了不一致的答案,而不是预期的结果,我想知道为什么。

$ cat chk.c
#include <stdio.h>

int main()
{
float a;

scanf("%4.1f", &a);
printf("%4.1f\n", a);

return 0;
}

$ cc chk.c && ./a.out
12.1
0.0
$

这根本无法正确读取输入!谁能解释一下这种行为吗?我在 Linux 上尝试了多个 GCC 版本,结果相同,并且网络搜索也没有用。

最佳答案

如果scanf格式中有空格,则表示读取所有字符,直到没有空格为止。为了做到这一点,它必须等到您输入非空白的内容,因此看起来好像它要求您输入多个值。使用 "\n" 并不意味着读取单个换行符,而是意味着读取所有空格。

printf 格式字符串不同,精度不是 scanf 格式字符串的一部分,因此 scanf 根本无法读取其中的 float 你的第二个例子。您最终打印了一个未初始化的值,恰好打印了 0.0。获取未初始化变量的值是未定义的行为,因此它可以执行任何操作。

关于c - 带有格式化 float 的 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25614830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com