Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
3 / 3 / 0
Регистрация: 02.02.2012
Сообщений: 6
1

При смене Float на double программа выдает нули

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

Author24 — интернет-сервис помощи студентам
Доброго времени.

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


C
1
2
3
        float f;
        scanf("%f", &f);
        printf("%.2f", f);
результат выводит норм. Но если заменить float на double то результат - просто все нули...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2012, 17:27
Ответы с готовыми решениями:

При вводе значения программа выдает нули
Задание во вложенной фотографии. У меня получаются 3 программы но при вводе значения они выдают...

Программа выдает одни нули при сортировке массива
вот код, программа вместо того , что-бы отсортировать массив по возрастанию , выдает на вывод одни...

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

На выходе программа выдаёт нули
Задание: Вычислить стороны треугольника A и B при условии, что заданы сторона C и углы...

8
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
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
1186 / 542 / 78
Регистрация: 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, когда успел передо мной написать=-O

0
silent_1991
02.02.2012, 17:37
  #6

Не по теме:

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

0
3 / 3 / 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
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
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/~aj... rintf.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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2012, 13:38
Помогаю со студенческими работами здесь

Ошибка в программе, программа выдает нули
#include<stdio.h> #include<conio.h> #include <math.h> float rectps (float x1, float y1, float...

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

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

Преобразовать массив по правилу: программа выдает нули
кажется что просто, но что бы не делал выводио нули =( вот я сделал преобрахование переменной Х в...

Разные результаты при расчетах с float и double
Здравствуйте! Почему при расчете с float и double получаю разные результаты? #include <iostream>...

Казусы с double и float при преобразовании в string
Всем привет. Хотелось бы узнать почему когда выполняю такой код: void __fastcall...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru