我希望在FP之后扫描具有1位数精度的浮子。
这是测试代码:
#include <stdio.h>
void main()
{
float f;
scanf("%.1f",&f);
printf("%f",f);
}
我已进入1.234,期待看到1.2而是 我看到了这个奇怪的结果: -107374176.000000
运行VS2010,有什么想法可以解决吗?
答案 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)