【发布时间】:2019-12-15 09:06:11
【问题描述】:
我在读取此 c 代码 sn-p 的两个浮点值时遇到问题:
#include<stdio.h>
long double add(long double a, long double b)
{ return a+b; }
int main()
{
long double a, b;
printf("Input two FP values: ");
//Here scanf isn't reading the 2nd value.
scanf("%lf %lf", &a, &b);
printf("%lf", add(a,b));
return 0;
}
当提供 2 和 4 作为输入时,程序显示 0.000000 作为输出。
【问题讨论】:
-
你没有检查
scanf的返回值。此外,您没有告诉我们您为程序提供的实际输入。是 "24 " 还是 "2 4 " 还是别的什么? (另外,如果您的编译器没有给您警告,请了解如何启用它们或获得更好的编译器。如果您忽略警告,请不要。) -
scanf("%f %lf %Lf", &floatvar, &doublevar, &longdoublevar)甚至更好的if (scanf("%f %lf %Lf", &floatvar, &doublevar, &longdoublevar) != 3) /* error */;和等效:printf("%f %f %Lf", floatvar, doublevar, longdoublevar);或printf("%f %lf %Lf", floatvar, doublevar, longdoublevar); -
对于
long double,您需要为"%Lf"转换说明符指定'L'转换。 -
你用的是什么编译器?请注意,mingw.org 编译器在 long double 的许多方面存在错误(mingw-w64 修复了此问题)
标签: c floating-point scanf format-specifiers