Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Си. Печать массива double'ов в файл и обратно.

16K
06 мая 2006 года
Morag
6 / / 06.05.2006
Нужен код чтобы печатать массив double в файл и, соответственно, читать этот массив оттуда. Очень нужно. Это часть одной большой лабы, но проблема только в этом месте.
Желательно, чтобы в файле числа хранились в виде текста, что бы можно было рамочки псевдографикой там сделать.
Заранее спасибо за помощь.
16K
06 мая 2006 года
Morag
6 / / 06.05.2006
Приведу мой код.
Печать в файл:
Код:
fp=fopen ("results.txt","w+");     // Open file to write results
    if(fp==NULL) cout << "Error! Can't open file!\n";
    else
        {
        cout << "\n\nWriting to file...";
        for(i=0;i<numofexp;i++)
            {
            sprintf(str,"%+5.5f   ",y);
            cout<<str;
            while(str[j]!='\0'){fputc(str[j],fp);j++;}
            j=0;
            if((i%4)==3) fputc('\n',fp);
            }
        }

    fclose(fp);
    cout << "\nWriting complete!";


и, соответственно чтение из файла:
 
Код:
fp=fopen ("results.txt","r");
    if(fp==NULL) cout << "Error! Can't open file!\n";
    else
    {
        while(c=getc(fp)!= EOF){cout<<c;}
    }
        fclose(fp);


Так вот выводится просто куча мордочек(символ мордочки), а не цифры и все отстальное.
9.5K
06 мая 2006 года
Damarus
101 / / 08.04.2006
Можно проще. Запись в файл:
Код:
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void main(int argc, char *argv[])
{
   double double_array[5] = { -1.2323e+3, 2.334, 3.034e-1, 4.34, 54.1 };

   ofstream output(L"results.txt", ios_base :: out | ios_base::trunc);
   if (!output.is_open()) return;
   output.setf(ios_base::fixed);

   for (int n = 0 ; n < 5 ; n++)
      output << double_array[n] << endl;

   output.close();
}


Чтение из файла:
Код:
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void main(int argc, char *argv[])
{
   ifstream input(L"results.txt", ios_base::in);
   if (!input.is_open()) return;

   while (!input.eof())
   {
      string value; input >> value;
      if (!value.empty())
         cout << value << endl;
   }

   input.close();
}


PS. Модераторам - почему ios_base :: out не отображается.
242
07 мая 2006 года
Оlga
2.2K / / 04.02.2006
 
Код:
ios_base :: out


 
Код:
ios_base :: out


потому что без пробела написал, а это символ смайлика. почему в тэгах код это происходит это вопрос к админу, не ко мне
16K
07 мая 2006 года
Morag
6 / / 06.05.2006
Спасибо большое Damarus, но можно ли все это осуществить тем диапазоном функций, каким пользовался я, а то препод будет задавать лишние вопросы?
P.S. Я могу весь код лабы привести, если надо.
9.5K
08 мая 2006 года
Damarus
101 / / 08.04.2006
Можно и твоими функциями. Запись в файл:
Код:
#include <stdio.h>

void main(int argc, char* argv[])
{
   double double_array[5] = { -3.2323e+3, 2.334, 3.034e-1, 4.34, 54.1 };

   FILE* output = fopen("results.txt", "w+");
   if (output == 0) return;

   for (int n = 0 ; n < 5 ; n++)
      fprintf(output, "%f\n", double_array[n]);

   fclose(output);
}


Чтение из файла:
Код:
#include <stdio.h>

void main(int argc, char* argv[])
{
   FILE* input = fopen("results.txt", "r");
   if (input == 0) return;

   while (!feof(input))
   {
      char szBuffer[32] = { 0 };
      fscanf(input, "%s", &szBuffer);
      printf("%s\n", szBuffer);
   }

   fclose(input);
}
16K
08 мая 2006 года
Morag
6 / / 06.05.2006
Спасибо большое Damarus! Все работает, буду сдавать. Но если тебе не сложно, то скажи, что в моем коде неправильно.
9.5K
08 мая 2006 года
Damarus
101 / / 08.04.2006
Код записи в файл вообщем то правильный, только не рациональный. В коде чтения проблемма здесь:
 
Код:
while(c = getc(fp) != EOF) { cout << c; }


У тебя в c записывается не значение, возвращаемое getc(fp), а логический результат сравнения getc(fp) != EOF. Исправить просто:
 
Код:
while((c = getc(fp)) != EOF) { cout << c; }
16K
09 мая 2006 года
Morag
6 / / 06.05.2006
Результат логического выражения 0 или 1, так почему мордочки?
9.5K
09 мая 2006 года
Damarus
101 / / 08.04.2006
Потому, что код мордочки равен 1.
242
10 мая 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
Originally posted by Damarus
Можно проще. Запись в файл:
 
Код:
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void main(int argc, char *argv[])
{
   ofstream output(L"results.txt",[color=green] ios_base::out[/color] | ios_base::trunc);


PS. Модераторам - почему ios_base :: out не отображается.


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

9.5K
10 мая 2006 года
Damarus
101 / / 08.04.2006
Цитата:
Originally posted by OlgaKr
меня на днях посетила неплохая идея, почему бы не отключать в постах с кодом смайлики, если возникают проблемы



Хм...

 
Код:
ios_base::out
. Замечательная идея, спасибо Олья.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог