Чтение в двойных значениях с помощью scanf в c
Я пытаюсь прочитать 2 значения с помощью scanf() в C, но значения, которые система записывает в память, не равны моим введенным значениям. Вот код:
double a,b;
printf("--------\n"); //seperate lines
scanf("%ld",&a);
printf("--------\n");
scanf("%ld",&b);
printf("%d %d",a,b);
Если я введу 1 и 2, CMD вернет правильный, но b = -858993460 Вот что я уже пробовал:
используя float или int вместо double, используя scanf_s, используя scanf ( "% d или% f для% я или% li или% lf или% e или% g), используя fflush (stdin), чтобы очистить буфер клавиатуры, считая b во-первых, стараюсь как все возможные комбинации. Я выяснил, что существует проблема с удвоением длины 32-битной ОС, так что вы вынуждены использовать scanf (" % lf", & f) для чтения в двойном. Независимо от того, что я делаю, второе значение всегда неверно.
Я использую MS VS express 2012 для настольных компьютеров под управлением Windows 7 32-разрядной ОС.
Ответы
Ответ 1
Используйте спецификатор формата %lf
для чтения двойника:
double a;
scanf("%lf",&a);
Википедия имеет достойную ссылку для доступных спецификаторов формата.
Вам нужно будет использовать спецификатор формата %lf
, чтобы распечатать результаты:
printf("%lf %lf",a,b);
Ответ 2
Насколько я знаю, %d
означает decadic, который является числом без десятичной точки. если вы хотите загрузить двойное значение, используйте преобразование %lf
(long float). для printf ваши значения ошибочны по той же причине, %d
используется только для чисел целых (и, возможно, символов, если вы знаете, что вы делаете).
Пример:
double a,b;
printf("--------\n"); //seperate lines
scanf("%lf",&a);
printf("--------\n");
scanf("%lf",&b);
printf("%lf %lf",a,b);
Ответ 3
Вы используете неправильную последовательность форматирования для double
, вы должны использовать %lf
вместо %ld
:
double a;
scanf("%lf",&a);
Ответ 4
Спецификатор формата в printf
должен быть %f
для doubl
типов данных, так как float
datatyles в конечном итоге преобразуются в double
типы данных внутри printf
.
Нет данных для печати данных float
. Пожалуйста, найдите здесь обсуждение: Исправить спецификатор формата для double в printf
Ответ 5
Использование %lf
поможет вам в решении этой проблемы.
Использование:
scanf("%lf",&doub)