Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.91
KolganovM
1 / 1 / 0
Регистрация: 02.02.2012
Сообщений: 6
#1

При смене Float на double программа выдает нули - C (СИ)

02.02.2012, 17:27. Просмотров 7131. Ответов 8
Метки нет (Все метки)

Доброго времени.

При вводе следующего кода


C
1
2
3
        float f;
        scanf("%f", &f);
        printf("%.2f", f);
результат выводит норм. Но если заменить float на double то результат - просто все нули...
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2012, 17:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При смене Float на double программа выдает нули (C (СИ)):

Программа выдает одни нули при сортировке массива - C (СИ)
вот код, программа вместо того , что-бы отсортировать массив по возрастанию , выдает на вывод одни нули #include<stdio.h> ...

Программа выдает одни нули при вычислении среднего арифметического и геометрического - C (СИ)
Привет всем! Я только около недели, как начал изучать Си по самоучителю... Задание: создать программу, которая обчисляет среднее...

Ошибка в программе, программа выдает нули - C (СИ)
#include<stdio.h> #include<conio.h> #include <math.h> float rectps (float x1, float y1, float x2, float y2) { float p,s; ...

Динамические массивы - программа выдает нули - C (СИ)
Добрый день! Помогите,пожалуйста,найти в программе ошибку. Вместо нужных чисел выдает все нули. Спрашивала у нескольких людей,они...

Программа с оператором switch выдает только нули - C (СИ)
ребят, пожалуста, подскажите что делаю не так, по аналогии вроде-бы делаю всё правильно, условия написаны ясно и понятно, но запускаю...

Самописный double/float - C (СИ)
Как сделать для Разности? Должны получиться такие результаты Для суммы: 2.3 Для разности: -0.1 ААа ещё будет лучше, если...

8
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
02.02.2012, 17:31 #2
KolganovM, спецификатор %lf надо использовать.
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.02.2012, 17:33 #3
Цитата Сообщение от KolganovM Посмотреть сообщение
Но если заменить float на double то результат - просто все нули...
- вот так запиши
double f = 0;
scanf("%lf", &f);
printf("%.2f", f);

Добавлено через 55 секунд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
lf
- спецификатор lf (англ л и f)
1
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
02.02.2012, 17:34 #4
Как-бы float меньше double так что ничего удивительного что если оставить тот же scanf и printf, но использовать double вместо float то программа не будет работать корректно, что именно вас удивляет?
0
-=ЮрА=-
02.02.2012, 17:36
  #5

Не по теме:

silent_1991, когда успел передо мной написать

0
silent_1991
02.02.2012, 17:37
  #6

Не по теме:

-=ЮрА=-, примерно в 20:31 по новосибирскому времени

0
KolganovM
1 / 1 / 0
Регистрация: 02.02.2012
Сообщений: 6
02.02.2012, 18:10  [ТС] #7
Все работает. Благодарю.

Цитата Сообщение от Gepar Посмотреть сообщение
Как-бы float меньше double так что ничего удивительного что если оставить тот же scanf и printf, но использовать double вместо float то программа не будет работать корректно, что именно вас удивляет?
Удивляет что для вывода float/double используется один и тот же модификатор, но результат выводится неверный. Но как оказалось дело в scanf.
0
Evg
Эксперт CАвтор FAQ
18258 / 6383 / 440
Регистрация: 30.03.2009
Сообщений: 17,664
Записей в блоге: 28
02.02.2012, 18:52 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от KolganovM Посмотреть сообщение
Удивляет что для вывода float/double используется один и тот же модификатор
Функция printf имеет эллипс (три точки). По стандарту языка Си аргументы типа float, передаваемые как неявно описанные (что имеет место быть в случае эллипса) всегда преобразуются к double'у (это делает компилятор). Т.е. если ты в printf передаёшь значение типа float, то компилятор сначала преобразует его в double. В случае scanf'а используются указатели, для которых эти правила, естественным образом, не работают. Именно из-за этого имеет место быть некоторая несимметрия в работе printf'а и scanf'а
7
-=ЮрА=-
Заблокирован
Автор FAQ
10.02.2012, 13:38 #9
Цитата Сообщение от KolganovM Посмотреть сообщение
Удивляет что для вывода float/double используется один и тот же модификатор, но результат выводится неверный. Но как оказалось дело в scanf.
http://www.dgp.toronto.edu/~ajr/209/notes/printf.html
Footnote: In printf(), the rvalue type promotions are expected. Thus %c actually corresponds to a parameter of type int and %f and %g actually correspond to parameters of type double. Thus in printf() there is no difference between %f and %lf, or between %g and %lg. However, in scanf() what is passed is a pointer to the variable so no rvalue type promotions occur or are expected. Thus %f and %lf are quite different in scanf, but the same in printf.
+ посмотри код
Ищу код перевода числа в строку и назад...
0
10.02.2012, 13:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2012, 13:38
Привет! Вот еще темы с ответами:

Перевести типы double во float - C (СИ)
Я использовал double у себя в проекте для дробных, а теперь надо сделать их float. Я делал так: #define double float в каждом хэдере....

Double/float двоичное представление - C (СИ)
отрывок из статьи о представлении числа с плавающей точкой. Порядок вычисляется как E-127 . Но ведь при таком вычислении нельзя...

Перевести одну строку c float в double - C (СИ)
Подскажите. Есть код. Все задано через float. Но 10 VS не вытаскивает одну из строк, и из-за этого необходимо задать все через double, но...

Диапазон значений типов float, double - C (СИ)
Добрый день! Объясните, пожалуйста, почему диапазон значений типа float (язык Си) от 3.4E–38 до 3.4E38. В то время как float описывается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru