scanf格式化浮点数

时间:2014-09-02 01:57:40

标签: c input scanf

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

$ 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版本,结果相同,网络搜索也没用。

1 个答案:

答案 0 :(得分:1)

如果您有scanf格式的空格,则表示在没有空格之前读取所有字符。为了做到这一点,它必须等到你输入不是空格的东西,所以它似乎要求你输入多个值。使用"\n"并不意味着读取单个换行符,这意味着读取所有空格。

printf格式字符串不同,precision不是scanf格式字符串的一部分,因此scanf在第二个示例中无法读取浮点数。您最终打印出未初始化的值,恰好打印0.0。获取未初始化变量的值是未定义的行为,因此它可以做任何事情。