ввод-вывод в C

double d;
scanf("%f", &d);
printf("%f", d);

результат:

ввод: 10,3

выход: 0.00000

Почему? Я думаю, что на выходе должно быть 10,3 Visual Studio 2008.


person Sergey    schedule 07.03.2010    source источник
comment
теперь, когда ваша проблема решена, stackoverflow.com/questions/ 2377733 / how-does-this-program-work может немного прояснить ситуацию!   -  person Lazer    schedule 07.03.2010


Ответы (2)


Для scanf(), %f - для float. Для double вам нужно %lf. Так,

#include <stdio.h>
main() {
    double d; 
    scanf("%lf", &d); 
    printf("%f\n", d);
}

при вводе 10.3 выдает 10.300000.

person Ramashalanka    schedule 07.03.2010
comment
+1 для строки формата% 4.1lf Сергей мог просмотреть это: cplusplus.com/reference/ clibrary / cstdio / printf - person stacker; 07.03.2010
comment
%lf необходим для scanf(), но для printf() %f означает double (и работает также с float, потому что float повышается до double в переменной части списка аргументов). %lf не имеет смысла для printf(). - person caf; 07.03.2010
comment
printf - это функция vararg, поэтому продвижение аргументов не требуется - компилятор не знает типов аргументов, кроме строки формата. Сказал, что нужен% lf. - person el.pescado; 07.03.2010
comment
el.pescado: существует определенный набор продвижений аргументов, которые всегда применяются к аргументам в переменной части списка аргументов (они такие же, как те, которые применяются к аргументам функции, объявленной без прототипа). - person caf; 08.03.2010

Попробуйте заменить %f на %lf. %f используется при работе с float, а не double. (или, как вариант, вы можете сделать d a float).

person MAK    schedule 07.03.2010