Подтвердить что ты не робот

Чтение в двойных значениях с помощью 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-разрядной ОС.

4b9b3361

Ответ 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)