Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение из файла 
V
    Опции темы
PandaRus
Дата 8.10.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 27.12.2006

Репутация: нет
Всего: нет



Как правильно читать из файла?
Код

/////////////////////////////////////////////////////////////////
float** G=new float*[1000];
    for(i=0;i<1000;i++)
        G[i]=new float[1000];
/////////////////////////////////////////////////////////////////
for(i=1; i<=k; i++)
{
    for(j=1; j<=k; j++)
        fprintf(outfile," %+12.10f ",G[i][j]);
    fprintf(outfile,"\n");
}
for(i=1; i<=k; i++)
    for(j=1; j<=k; j++)
        fscanf(outfile,"%f",G[i][j]); // - не работает - Unhandled exception at 0x1023817a (msvcr80d.dll) in Diplom2.exe: 0xC0000005:   Access violation writing location 0x00000000.


что необходимо исправить?
PM MAIL   Вверх
zkv
Дата 8.10.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(PandaRus @  8.10.2007,  21:58 Найти цитируемый пост)
что необходимо исправить? 

в fscanf необходимо передавать адрес объекта:
Код

fscanf(outfile,"%f",&G[i][j]);

PM MAIL   Вверх
archimed7592
Дата 8.10.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Раз пользуешься С++, то обрати внимание на намного более удобные(особенно в этом плане) потоки(#include <fstream>).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Rockie
Дата 10.10.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(PandaRus @  8.10.2007,  21:58 Найти цитируемый пост)
что необходимо исправить?


Цитата(PandaRus @  8.10.2007,  21:58 Найти цитируемый пост)
for(i=1; i<=k; i++)    
   for(j=1; j<=k; j++)
        fscanf(outfile,"%f",G[i][j]); 

на 
Код
for(i=0; i<1000; i++)    
   for(j=0; j<1000; j++)
        fscanf(outfile,"%f",G[i][j]);

Нумерация с нуля, в противном случае ты выходишь за предел массива и справедливо получаешь
Цитата(PandaRus @  8.10.2007,  21:58 Найти цитируемый пост)
Access violation 




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Lazin
Дата 10.10.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Код

size_t Height = 1000, Width = 1000;
float G[] = new float[Height*Width];
//доступ по индексам
for (int ix = 0; ix != Width; ix++)
{
 for (int iy = 0; iy != Height; iy++)
 {
  G[ix + iy*Width] = ....
 }
}
//такой способ работы с 2х мерным массивом намного быстрее

//сохранение в  дамп
HANDLE hFile = CreateFile(
                            filename,
                            GENERIC_READ|GENERIC_WRITE,
                            FILE_SHARE_READ,
                            NULL,
                            OPEN_ALWAYS,
                            0,
                            NULL
                        );
DWORD bytes = 0;
WriteFile(hFile, (BYTE*)G,  (DWORD)(sizeof(float)*Height*Width), &bytes, NULL );//Сдесь происходит запись в двоичный файл всего массива
//или
//форматированный вывод
char buffer[4096];
for (int ix = 0; ix != Width; ix++)
{
 for (int iy = 0; iy != Height; iy++)
 {
   _snprintf(buffer, 4096, "%f, ", G[ix + iy*Width]);
   WriteFile(hFile, buffer, strlen(buffer), &bytes, NULL);
 }
}

а чтение зависит от формата файла в принципе, нужно сначала узнать размер массива, потом сделать чтение:
В случае текстового файла - 
Код

for (int ix = 0; ix != Width; ix++)
{
 for (int iy = 0; iy != Height; iy++)
 {
   fscan(outfile, "%f", &(G[ix + iy*Width]) );
 }
}


Это сообщение отредактировал(а) Lazin - 10.10.2007, 14:49
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.