Запись значения двойного типа в текстовый файл - PullRequest
11 голосов
/ 03 июня 2011

Приведенный ниже код записывает нечитаемые символы в текстовый файл:

int main () 
{
    ofstream myfile ("example.txt");

    if (myfile.is_open())
    {
        double value       = 11.23444556;
        char   *conversion = (char *)&value;
        strcat (conversion, "\0");

        myfile.write (conversion, strlen (conversion));
        myfile.close();
    }   

    return 0;
}

Я хочу увидеть фактическое число, записанное в файле :( Подсказки, пожалуйста.

РЕДАКТИРОВАТЬ Видя ответы ниже, я изменил код следующим образом:

int main () 
{
    ofstream myfile ("example.txt");

    if (myfile.is_open())
    {
        double value       = 11.23444556;

        myfile << value;
        myfile.close();
    }   

    return 0;
}

Это приводит к выводу: 11.2344 , а фактическое число равно 11.23444556 . Я хочуполное число.

Редактирование сообщения для уведомления всех: Нечитаемые символы из-за функции записи ofstream:

Это неформатированная функция вывода

Эта цитата из: http://www.cplusplus.com/reference/iostream/ostream/write/

Ответы [ 4 ]

27 голосов
/ 03 июня 2011

Почему бы вам просто не сделать это (обновленный ответ после редактирования в вопросе):

 #include <iomanip>

 myfile << std::fixed << std::setprecision(8) << value;
 myfile.close();

Теперь вы можете увидеть фактическое число, записанное в файле.

См. Документацию std::setprecision.Примечание: вы должны включить заголовочный файл <iomanip>.

3 голосов
/ 03 июня 2011

Здесь проще использовать операторы потока:

#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

int main () 
{
    ofstream myfile ("example.txt");

    if (myfile.is_open())
    {
        double value       = 11.23444556;

        myfile << value;
        myfile.close();
    }   

    return 0;
}

дает вам то, что вы хотите.

1 голос
/ 03 июня 2011

Другие предлагали более эффективные способы, но если вы действительно хотите сделать это указателем, то должны быть приведены выражения, чтобы преобразовать char * в double * и наоборот

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;

int main () 
{
  ofstream myfile ("example.txt");
  if (myfile.is_open())
  {
    double value       = 11.23444556;
    char     *conversion = reinterpret_cast<char *>(&value);
    strcat (conversion, "\0");
    //myfile.write (*conversion, strlen (conversion));
    myfile << *(reinterpret_cast<double *>(conversion));
    myfile.close();
  }
  return 0;
}
0 голосов
/ 03 июня 2011

Вы можете записать значение в файл следующим образом:

myfile << value;

Использование адреса значения в качестве параметра strcat повреждает ваш стек, поскольку strcat ожидает 0-концевую c-строку в качестве первойаргумент (и фактически выделенное пространство).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...