2015-10-21 2 views
0

Я пытаюсь читать в double значение от пользователя с помощью scanf.Scanf не читается в double

Код:

printf("Enter A value: \n"); 
double input; 
int result = scanf("%f", &input); 
printf("INPUT: %f\n", input); 

Выход

INPUT: 0.000 
+0

Почему результат int, а не double? – Michi

+0

@ user3121023 Мне было любопытно узнать о намерении ОП, сделав это. :) – Michi

ответ

6

Вы солгали компилятором: при сканировании, %f говорит, что вы поставить указатель на float. Но вы указали указатель на double.

Чтобы исправить, либо использовать %lfили объявить input, как float.

Обратите внимание, что существует асимметрия с printf форматов, который использует %f для обоих float и double аргументов. Это работает, потому что аргументы printf рекламируются до double (и не являются указателями).

2

Я пытаюсь читать в двойном значении непрерывно от пользователя с помощью scanf.

Для этого вам нужен цикл, как следующее:

while(scanf("%lf", &input) == 1) { 
    //code goes here... 
    printf("INPUT: %lf\n", input); 
    //code goes here... 
} 

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

+0

Должно ли это быть '! = EOF' или' == 1'? –

+0

@FiddlingBits, вы правы, ответьте на обновления. [scanf возвращает значение макроса EOF, если входной сбой происходит до любого преобразования. В противном случае scanf возвращает количество назначенных элементов ввода, которое может быть меньше, чем предусмотрено, или даже равно нулю, в случае раннего совпадения сбоев.] (Http://www.rowleydownload.co.uk/arm/documentation/ ? index.htm HTTP: //www.rowleydownload.co.uk/arm/documentation/scanf.htm) –

Смежные вопросы