quadmath и тип аргумента для 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 .

Обратите внимание, что streamи C ++ могут быть расширены для извлечения __float128 , но я не вижу интерфейса C ++ в библиотеке quadmath.

Вы не можете использовать спецификатор %Qf в scanf , вы должны ввести числа высокой точности как строку, а затем использовать strtoflt128 для преобразования. Вы также не можете использовать спецификатор %Qf в printf , используйте quadmath_snprintf для преобразования __float128 плавающей запятой __float128 в строку, а затем используйте printf с printf %s для его отображения. Вот пример.

 #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; } 

запустить программу:

введите 3 значения для s, t и mt:
3,4 4,5 5,6 (ввод)
3.400000 4.500000 5.600000