Чтение двойных значений с помощью 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 для% i или% li или% lf или% e или%g), используя fflush(stdin) для очистки буфера клавиатуры, сначала читая в b, пробуя все возможные комбинации. Я обнаружил, что есть проблема с длиной double в 32-битной ОС, так что вы вынуждены использовать scanf("%lf", &f) для чтения в двойном формате. Независимо от того, что я делаю, второе значение всегда неверно.

Я использую MS VS Express 2012 для рабочего стола на Windows 7 32-битной ОС.

7 ответов

Решение

Использовать %lf спецификатор формата для чтения двойного:

double a;
scanf("%lf",&a);

В Википедии есть хорошая ссылка для доступных спецификаторов формата.

Вам нужно будет использовать %lf спецификатор формата для распечатки результатов:

printf("%lf %lf",a,b);

Насколько я знаю %d означает десятичное число, которое является числом без десятичной точки. если вы хотите загрузить двойное значение, используйте %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);

Вы используете неправильную последовательность форматирования для double, вы должны использовать %lf вместо %ld:

double a;
scanf("%lf",&a);

Спецификатор формата в printf должно быть %f за doubl типы данных с float данные в конечном итоге преобразуются в double типы данных внутри printf,

Там нет положения для печати float данные. Пожалуйста, найдите обсуждение здесь: Правильный спецификатор формата для double в printf

Используйте эту строку кода при сканировании второго значения:scanf(" %lf", &b);также замените все%ld на%lf.

Это проблема, связанная с буфером входного потока. Вы также можете использовать fflush(stdin); после первого сканирования, чтобы очистить входной буфер, а затем второй scanf будет работать должным образом. Альтернативный способ - разместить getch(); или getchar(); функция после первой строки scanf.

Правильные способы:

      double a,b;
printf("--------\n"); //seperate lines
scanf("%lf",&a);        //%lf is long float numbers 
printf("--------\n"); 
scanf("%lf",&b);
printf("%f %f",a,b);     //%f float number

С помощью %lf поможет вам в решении этой проблемы.

Используйте:

scanf("%lf",&doub)
Другие вопросы по тегам