scanf的quadmath和参数类型
我使用 。 使用哪种参数类型可以正确读取输入? 如果我使用双倍,它看起来像:
printf("enter 3 values for s, t and mt:\n"); scanf("%lf %lf %lf", &s, &t, &mt); printf("%lf %lf %lf\n", s, t, mt);
我尝试了不同的可能性,而不是“l”,例如:
scanf("%Qf %Qf %Qf", &s, &t, &mt);
甚至没有
scanf("%f %f %f", &s, &t, &mt);
但是我收到了一个错误。
scanf
(以及相关函数和printf
及相关函数) 不可扩展 。 它只能解析标准库知道的内容。 C标准库附带操作系统,而不是编译器。 它不知道libquadmath,它是一个编译器扩展。
因此,您必须使用strtoflt128
读取字符串并单独转换它们。
请注意,可以扩展C ++流以提取__float128
,但我没有在quadmath库中看到C ++接口。
你不能在scanf
使用%Qf
说明符,你应该输入高精度数字作为字符串,然后使用strtoflt128
进行转换。 您也不能在printf
使用%Qf
说明符,使用quadmath_snprintf
将__float128
浮点数转换为字符串,然后使用带有%s
说明符的printf
来显示它。 这是一个例子。
#include #include int main() { char s[256], t[256], mt[256]; printf("enter 3 values for s, t and mt:\n"); scanf("%s %s %s", s, t, mt); __float128 qs = strtoflt128(s, NULL); __float128 qt = strtoflt128(t, NULL); __float128 qmt = strtoflt128(mt, NULL); quadmath_snprintf(s, 256, "%Qf", qs); quadmath_snprintf(t, 256, "%Qf", qt); quadmath_snprintf(mt, 256, "%Qf", qmt); printf("%s %s %s", s, t, mt); return 0; }
运行程序:
为s,t和mt输入3个值:
3.4 4.5 5.6(输入)
3.400000 4.500000 5.600000