scanf的quadmath和参数类型

scanf的quadmath和参数类型,c,scanf,quadruple-precision,C,Scanf,Quadruple Precision,我使用。使用哪种参数类型可以正确读取输入? 如果我使用double,它看起来像: 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(

我使用
。使用哪种参数类型可以正确读取输入? 如果我使用double,它看起来像:

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++流可以扩展为提取代码> > FoLAT128</代码>,但在四元库中没有看到C++接口。

< P>不能在<代码> SCANF中使用<代码> %QF< /Calp>说明符,应该输入高精度的数字作为字符串,然后使用<代码> StrfLT12128/COD>转换。您也不能在
printf
中使用
%Qf
说明符,使用
quadmath\u snprintf
\u float128
浮点数转换为字符串,然后使用
printf
%s
说明符来显示它。这里有一个例子

#include <stdio.h>
#include <quadmath.h>
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;
}
#包括
#包括
int main()
{
字符s[256],t[256],mt[256];
printf(“为s、t和mt输入3个值:\n”);
扫描量(“%s%s%s”,s,t,mt);
__float128 qs=strtoflt128(s,空);
__float128 qt=strtoflt128(t,NULL);
__float128 qmt=strtoflt128(mt,空);
四元(s,256,“%Qf”,qs);
四元数(t,256,“%Qf”,qt);
quadmath_snprintf(mt,256,“%Qf”,qmt);
printf(“%s%s%s”,s,t,mt);
返回0;
}
运行程序:

为s、t和mt输入3个值:
3.4.5.6(输入)
3.400000 4.500000 5.600000


你需要公布你所遇到的错误,否则很难回答。你遇到了什么错误?在scanf中不要使用空格。@Rahul:scanf中的空格很好定义。这意味着输入要一直读到空格。这不是一个真正的错误,但输入的数字无法识别。最后我得到-nanIt的意思是:printf(“为s、t和mt输入3个值:\n”);扫描(“%c%c%c”、&s、&t、&mt);然后s=uu float128 strtoflt128(“s”,NULL);依此类推?@user3305448不是
%c',使用
%s
,您应该将
s
t
mt`标记为字符数组,该数组足够大,可以容纳您输入的内容。@user3305448:差不多。字符串是
%s
%c
只是一个字符,这还不够。您应该真正包括长度限制,因此它更像
%63s
(如果您声明
chars[64]
并将
s
作为参数传递)或
%ms
(如果您声明
char*s
,将
&s
作为参数传递,然后调用
free
)。请注意,
%ms
是GNU扩展,但than quadmath也不可移植。