Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2011, 18:57   #1
Колесо
Новичок
Джуниор
 
Регистрация: 18.12.2011
Сообщений: 2
По умолчанию Записать число float в файл

Здравствуйте.
Подскажите как записать число в файл?
Пробовал через fputs , но там переменную надо передавать типа char. Насколько я знаю в с++ нет функций перевода типа.
ЗЫ файл открываю через fopen.
Колесо вне форума Ответить с цитированием
Старый 18.12.2011, 20:01   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Я использую double вместо float. Вот так можно записать:
Код:
#include <stdio.h>

int main () {
    char* filename = "output.txt";
    FILE* fp = fopen(filename, "w+");
    double val;

    val = 5.456;
    fprintf(fp, "%f", val);

    return 0;
}
8Observer8 вне форума Ответить с цитированием
Старый 18.12.2011, 20:09   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Колесо Посмотреть сообщение
Здравствуйте.
Подскажите как записать число в файл?
Пробовал через fputs , но там переменную надо передавать типа char. Насколько я знаю в с++ нет функций перевода типа.
ЗЫ файл открываю через fopen.
1. На с++ есть свои удобные инструменты работы с файлами:

пример с описанием на русском языке:
http://ci-plus-plus.blogspot.com/2011/07/c_4094.html

2. с++ поддерживает приведение типов к стиле си, а так же имеет более продвинутые версии приведения типов в стиле с++

3. Что бы загнать байты, занимаемые типом данных float в массив чаров, нужно сделать так:

float Val=10.33; //допустим, это наш флоат

char data[ sizeof(float) ]; //объявим массив чаров, способный принять все байты, занимаемые флоатом

char* ptr = &Val; //взяли адрес, где хранится первый байт дробного числа
for( unsigned int i=0; i< sizeof(float); ++i)
{
data[i]=ptr;
ptr++;
}

В результате массив чаров заполнится байтами, которые и формируют дробное число.

Обратное преобразование:

float f1= *( (float*) data );

Здесь сначала data интерпритировалась, как указатель на тип данных float
А потом уже, f1 было присвоено значение, на которое указывает указатель на float
_Bers вне форума Ответить с цитированием
Старый 18.12.2011, 20:14   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в бинарном формате записать через fwrite никак?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли в массив типа char записать первым элементом значение переменной типа float? Green Gin Общие вопросы C/C++ 2 05.12.2011 01:50
сохранение массива float в файл alvahtin Общие вопросы C/C++ 1 11.10.2011 12:55
Перевод пакетных данных в float число Serval Свободное общение 1 28.07.2009 12:52
Как узнать что число не Float(без остатка) при результате деления? zotox Помощь студентам 7 19.07.2009 15:49
За один ход можна вычеркнуть одно число и на его место записать строго меньше неотрицательное число. Witaliy Помощь студентам 5 25.02.2009 17:44