在c中,要求在点之后扫描1位数并获得回音

时间:2017-03-18 20:39:34

标签: c

我希望在FP之后扫描具有1位数精度的浮子。

这是测试代码:

#include <stdio.h>

void main()
{
    float f;

    scanf("%.1f",&f);
    printf("%f",f);
}

我已进入1.234,期待看到1.2而是 我看到了这个奇怪的结果:  -107374176.000000

运行VS2010,有什么想法可以解决吗?

3 个答案:

答案 0 :(得分:1)

它打印随机数,因为对scanf的调用失败,而您正在打印未初始化的变量。

浮点精度规范仅适用于printf的调用,而不适用于scanf。您提供的格式说明符无效。

如果你检查了scanf的返回值,你就知道调用失败了,这等于成功转换的格式说明符的数量。

如果您想要一个特定的数字精确度,您需要完整阅读它,然后执行截断/舍入操作。

答案 1 :(得分:1)

你不能这样做,你可以让scanf()读取特定数量的字符,如果你想要

float value;
scanf("%4f", &value);

并假设输入为

<强> 43.23
它会读

43.2

但您无法指定精度。

你可以做的是

float value;
if (scanf("%f", &value) == 1)
    printf("%.2f\n", value);

毕竟,精度受二进制表示的限制,因此只有两位小数是没有意义的,因为在算术运算中它可能是四舍五入的。

答案 2 :(得分:0)

scanf("%.1f",&f);

scanf()函数中的格式说明符不正确;您不能指定所需的小数位数作为scanf()的输入,只有在想要使用printf()输出浮点数时才能这样做。

您需要使用scanf()完整接受输入:

scanf("%f",&f);

然后将您想要的数字打印到所需的小数位数:

printf("%.1f", f);

这会将1.234打印为1.2

main()默认情况下需要返回int的类型; void main()在C或C ++中不合法。即使您不想从main()返回任何内容,也请将其定义为:

int main(void)