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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2010, 20:50   #1
WIN32APIist
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 14
По умолчанию Запись массива в файл

Здравствуйте,
Пытаюсь записать в файл массив. В текстовом виде. В файле абракадабра. Подскажите , что не так. Еще такой вопрос, как записать не всеь массив, а только определенный диапазон?
Код:

#include "stdafx.h"
#include  <process.h>

const int n=10;

int main(int argc, char* argv[])
{
	double a[n];
	int i;
	FILE *file;
	if ((file=fopen("OUT.txt","w"))==NULL) {
		printf("Невозможно открыть файл\n");
		exit(1);
	};
	for (i=0;i<n;i++) {
		a[i]=i*i+3*i-6;
	};
	fwrite(a,sizeof(double),n,file);
	fclose(file);
	printf("Hello World!\n");
	return 0;
}
WIN32APIist вне форума Ответить с цитированием
Старый 30.12.2010, 00:03   #2
zloikakpes
 
Регистрация: 26.12.2010
Сообщений: 4
По умолчанию

Если на "окнах" сидишь случаем не стандартным блокнотом открываешь?
А то если аброкадабра - это признак того что "блокнот" либо не смог определить кодировку, либо не может с ней работать.

И еще, зачем в этом примере у тебя подрублена либа process.h и stdafx.h, или стандартного stdio уже не достаточно?
И зачем предаешь аргументы main`у ?
zloikakpes вне форума Ответить с цитированием
Старый 30.12.2010, 00:37   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

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

если хочешь чтобы записывал в десятичной системе
Код:
for(i=0;i<n;++i){
    fprintf(file,"%f\n",a[i]);
};
собственно чтобы указать диапазон измени параметры цикла for
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 30.12.2010 в 00:54.
Granus вне форума Ответить с цитированием
Старый 30.12.2010, 21:00   #4
WIN32APIist
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 14
По умолчанию

zloikakpes
В Main передаю потому что взял шаблон Console Application. process.h нужен чтоб работал exit(1).

Granus
Благодар. А нет такого чтоб массив не в цикле записывался, а как в фортране сразу весь массив одни оператором?
WIN32APIist вне форума Ответить с цитированием
Старый 30.12.2010, 21:36   #5
kenwood2010
Пользователь
 
Регистрация: 26.11.2010
Сообщений: 97
По умолчанию

Проект был реализован на C++ Builder6:
ниже приведен код записи в файл 2-х мерного массива:


Код:

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <fstream.h>
#include <string.h>

//---------------------------------------------------------------------------
#pragma hdrstop
#pragma argsused
//---------------------------------------------------------------------------


int main()
{
/*---Заполняем массив случайными числами---*/
int in[5][2]; // для заполнения числами
randomize();
for (int i=0; i<4; i++)
 {
   for (int j=0; j<1; j++) 
    {
       in[i][j] = random(50);
     }
 }

/*---Запись в файл ---*/
ofstream infile("C:\\1.txt");
infile.is_open();
infile <<"X Y"<<endl;

for (int i=0; i<4; i++)
 {
  for (int j=0; j < 1; j++)
   {
     infile << in[i][j]<< " ";
  {
    infile << endl;
  }

infile.close();
getch();
return 0;
}
kenwood20072@rambler.ru ICQ: 701 302 135. (Программирование на C++, С. Решение задач по физике)
kenwood2010 вне форума Ответить с цитированием
Старый 03.01.2011, 01:38   #6
arcer
Пользователь
 
Регистрация: 26.01.2010
Сообщений: 42
По умолчанию

Цитата:
Сообщение от WIN32APIist Посмотреть сообщение
Здравствуйте,
Пытаюсь записать в файл массив. В текстовом виде. В файле абракадабра. Подскажите , что не так. Еще такой вопрос, как записать не всеь массив, а только определенный диапазон?
Код:

#include "stdafx.h"
#include  <process.h>

const int n=10;

int main(int argc, char* argv[])
{
	double a[n];
	int i;
	FILE *file;
	if ((file=fopen("OUT.txt","w"))==NULL) {
		printf("Невозможно открыть файл\n");
		exit(1);
	};
	for (i=0;i<n;i++) {
		a[i]=i*i+3*i-6;
	};
	fwrite(a,sizeof(double),n,file);
	fclose(file);
	printf("Hello World!\n");
	return 0;
}
1) #include "stdafx.h", #include <process.h> - убейте, влепите #include <stdio.h>
2) вместо file=fopen("OUT.txt","w") нужно file=fopen("OUT.txt","w+"), если такого файла не существует еще.
3) NULL замените на 0, если в сях, а не плюсах.
Должно заработать точно.
Ах да, через блокнот в таком файле действительно будет абракадабра=)
Если нужно, чтоб были отдельные растабулированые, скажем, значения, то fwrite убейте и в цикле добавте строку fprintf(file."%lf\t",a[i]);

Последний раз редактировалось arcer; 03.01.2011 в 01:42.
arcer вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение/запись массива объектов в файл MrBrain Общие вопросы .NET 0 08.06.2010 10:44
Запись двумерного массива в файл rusasha Паскаль, Turbo Pascal, PascalABC.NET 7 03.05.2010 14:03
запись массива в файл lel-lis Общие вопросы C/C++ 6 25.01.2010 17:46
запись массива в файл Владимир1988 Помощь студентам 3 19.01.2010 09:25
ввод, запись массива чисел в файл Sairut Помощь студентам 1 11.12.2007 23:19