Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
6 / 6 / 7
Регистрация: 14.04.2010
Сообщений: 101

Запись динамического массива в файл (не правильно выводит данные)

10.07.2013, 22:11. Показов 2538. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Выделяю память под массив, заполняю его числами.

C++
1
2
3
4
5
6
7
8
9
10
11
    int *mem_arr;
    int i;
    int n = 50;
    mem_arr = (int *)malloc(n*sizeof(int));
    
    for(int i=0;i<6;i++)
    {
        printf("x[%d]=",i);
        scanf("%d",&mem_arr[i]);
    }
    free(mem_arr);
вывожу

C++
1
2
3
4
5
6
7
8
9
    ofstream file_out("c:/2.txt",ios::out);
    file_out << '\n';
    file_out << "Array R[6] = {"<<"\n";
    for(int c = 0; c < 6; c++)
    {
        file_out << dec << mem_arr[c] << "," << "\n";
    }
    file_out << "};" << '\n';
    file_out.close();
выводит не то, что я ввел.
помогите решить проблему.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    int z[5];
    printf("Input array's elements \n");
    int i;
        for(i=0;i<6;i++)
    {
        printf("x[%d]=",i);
        scanf("%d",&z[i]);
    }
 
    FILE *fp;
    fp = fopen("C:/1.txt","w");
    for(int c = 0; c < 6; c++)
    {
        fprintf(fp, "\n %d", z[c]);
    }
    fclose(fp);
так выводит все отлично.

Хотелось бы решить задачу, с выводом динамического массива и записью его в файл.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2013, 22:11
Ответы с готовыми решениями:

Чтение и запись в файл динамического массива классов
Здравствуйте! Столкнулся с проблемой во время написания программы, которая бы заносила определённые данные в файл, а потом считывала...

Не правильно выводит данные
Здравствуйте, есть такой запрос SELECT COUNT(DISTINCT `tv_tid`) AS `tcnt`, COUNT(DISTINCT `v_mid`) AS `mcnt` FROM ...

Программа выводит в окне диаграмму динамического массива данных
Можете создать программу которая выводит в окне диаграмму динамического массива данных, буду очень благодарен!!!

33
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
10.07.2013, 22:17
power12, сначала освобождаете память (free(mem_arr)), потом пользуетесь ею - надо наоборот, освобождать память, когда она уже не нужна.
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
10.07.2013, 22:21
Цитата Сообщение от power12 Посмотреть сообщение
free(mem_arr);
все нет у тебя больше памяти
отобрала система
может и свое что нибудь написать
или указатель поскольку уже невалидный может в другое место указывать
0
10.07.2013, 22:44

Не по теме:

не люблю малоки алоки, откуда они вообще такие взялись?!

0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
10.07.2013, 22:48
Цитата Сообщение от soican Посмотреть сообщение
не люблю малоки алоки, откуда они вообще такие взялись?!
из Си
иногда даже очень необходимы
например выделить память без вызова конструктора
или есть еще такая штука realloc (с new такого не сделаешь)
перераспределить память
0
6 / 6 / 7
Регистрация: 14.04.2010
Сообщений: 101
10.07.2013, 22:53  [ТС]
, сначала освобождаете память (free(mem_arr)), потом пользуетесь ею - надо наоборот, освобождать память, когда она уже не нужна.
Спасибо , мой косячок, не заметил.
не люблю малоки алоки, откуда они вообще такие взялись?!
по-другому не умею пока)

знаю, что можно так, пробовал, не получается, если сможешь написать код через new и delete, буду благодарен
C++
1
2
3
int m_arr = new int[n];
...
delete []m_arr ;

Ребят, такой вопрос.
Вот мой массив в файле


Array R[4] = {
5,
6,
7,
8,
};

как удалить последнюю запятую, она тоже у меня в цикле.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
10.07.2013, 23:01
Цитата Сообщение от power12 Посмотреть сообщение
знаю, что можно так, пробовал, не получается, если сможешь написать код через new и delete, буду благодарен
Код C++
1
2
3
int m_arr = new int[n];
...
delete []m_arr ;
C++
1
2
3
int * m_arr = new int[n];
...
delete[] m_arr;
1
6 / 6 / 7
Регистрация: 14.04.2010
Сообщений: 101
10.07.2013, 23:56  [ТС]
а как быть с выводом?
в txt записывается
Array R[4] = {
5,
6,
7,
8,
};
как убрать последнюю запятую?

C++
1
2
3
4
 for(int c = 0; c < 6; c++)
    {
        file_out << dec << mem_arr[c] << "," << "\n";
    }
надо что-то в выводе подправить?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
11.07.2013, 00:01
Цитата Сообщение от power12 Посмотреть сообщение
надо что-то в выводе подправить?
ну напиши так
C++
1
2
3
4
5
6
int c;
for(c = 0; c < 5; c++)
 {
  file_out << dec << mem_arr[c] << "," << "\n";
 }
file_out << dec << mem_arr[c] << "\n";
0
6 / 6 / 7
Регистрация: 14.04.2010
Сообщений: 101
11.07.2013, 00:06  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
ну напиши так
не не)) я про запятую, которая выводится в файл

что бы не было после 4ки

Array R[4] = {
1,
2,
3,
4,
};

что бы было

Array R[4] = {
1,
2,
3,
4
};

цикл например для 4х элементов
запятая тоже 4 раза выводится

что-то вроде c = cnt - 1 для запятой надо сделать, тогда она будет три раза выводится
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
11.07.2013, 00:10
Цитата Сообщение от power12 Посмотреть сообщение
не не)) я про запятую, которая выводится в файл
А я тебе про что?
в цикле выводишь пять элементов с запятой
а потом после цикла шестой(последний) без запятой

и как у тебя получилось
Цитата Сообщение от power12 Посмотреть сообщение
for(int c = 0; c < 6; c++)
а в файле 4 цифры?
чей то ты недоговариваешь
0
6 / 6 / 7
Регистрация: 14.04.2010
Сообщений: 101
11.07.2013, 00:15  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
А я тебе про что?
в цикле выводишь пять элементов с запятой
а потом после цикла шестой(последний) без запятой

и как у тебя получилось

а в файле 4 цифры?
чей то ты недоговариваешь
C++
1
2
3
4
5
6
7
8
9
10
    ofstream file_out("c:/2.txt",ios::out);
    file_out << '\n';
    file_out << "Array R["<< cnt << "]" << " = {" <<"\n";
    for(int c = 0; c < cnt; c++)
    {
        file_out << dec << mem_arr[c] <<  "," << "\n";
    }
    file_out << "};" << '\n';
    file_out.close();
    free(mem_arr);
вот, массив динамич. элементы произвольно.

C++
1
2
3
4
5
6
int c;
for(c = 0; c < 5; c++)
 {
  file_out << dec << mem_arr[c] << "," << "\n";
 }
file_out << dec << mem_arr[c] << "\n";
а тут не получится так) из-за
C++
1
 mem_arr[c]
в последней строчке) массив же в цикле выводится
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
11.07.2013, 00:19
на, пробуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ofstream file_out("c:/2.txt",ios::out);
file_out << '\n';
file_out << "Array R["<< cnt << "]" << " = {" <<"\n";
 
int c;
for(c = 0; c < cnt-1; c++)
{
file_out << dec << mem_arr[c] <<  "," << "\n";
}
file_out << dec << mem_arr[c]<< "\n";
 
file_out << "};" << '\n';
file_out.close();
free(mem_arr);
1
6 / 6 / 7
Регистрация: 14.04.2010
Сообщений: 101
11.07.2013, 00:24  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
на, пробуй
спасибо) только не пойму как он выводит

у нас же обращение идет по циклу(сколько элементов введено) и потом перебор всех элементов

C++
1
file_out << dec << mem_arr[c]<< "\n";
тут я завис...)
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
11.07.2013, 00:41
Цитата Сообщение от power12 Посмотреть сообщение
тут я завис...)
смотри
переменная объявлена вне цикла
Цитата Сообщение от ValeryS Посмотреть сообщение
int c;
значит будет видна не только в цикле
дальше цикл на один меньше чем размер
Цитата Сообщение от ValeryS Посмотреть сообщение
for(c = 0; c < cnt-1; c++)
допустим нужно 6 элементов
цикл выводит пять
потом после цикла в c будет 5 (cnt-1)
это индекс последнего элемента
выводим его
Цитата Сообщение от ValeryS Посмотреть сообщение
file_out << dec << mem_arr[c]<< "\n";
здесь вся фишка в том что переменная цикла объявлена вне его, значит будет видна и после цикла
а значение у нее после цикла будет cnt-1

Добавлено через 4 минуты
это так маленькие хитрости
например нужно вывести пять элементов с запятой а еще пять точка с запятой
чтобы не мучатся с if пишем так

C++
1
2
3
4
5
6
7
8
9
int c=0;
for(; c < 5; c++)
{
file_out << dec << mem_arr[c] <<  "," << "\n";
}
for(; c < 10; c++)
{
file_out << dec << mem_arr[c] <<  ";" << "\n";
}
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 08:59
Цитата Сообщение от ValeryS Посмотреть сообщение
из Си
иногда даже очень необходимы
например выделить память без вызова конструктора
В С++ для этого есть operator new.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
11.07.2013, 09:31
Цитата Сообщение от alsav22 Посмотреть сообщение
В С++ для этого есть operator new.
покажь
есть класс A
нужно выделить память под несколько экземпляров класса не вызывая при этом конструктор
переводить в char?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 10:12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
class A
{
    int x;
public:
    A()
    {cout << "A" << endl;}
};
 
 
int main()
{
   void *p = operator new(2 * sizeof(A));
   
   system("pause");
}
Добавлено через 6 минут
http://www.cplusplus.com/refer... ator%20new

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <cstdlib>
#include <new>
using namespace std;
 
class A
{
    int x;
public:
    A(int a)
    {
        x = a;
        cout << "A" << endl;
    }
    
    int get()
    {
        return x;
    }
};
 
 
int main()
{
   A *p = (A*)operator new(2 * sizeof(A));
   
   cout << "next" << endl;
   
   new(p)A(1);
   new(p + 1)A(2);
   
   cout << p ->get() << endl;
   cout << (p + 1) ->get() << endl;
   
   operator delete(p);
   
   system("pause");
   return 0;
}
Миниатюры
Запись динамического массива в файл (не правильно выводит данные)  
0
49 / 23 / 3
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
11.07.2013, 14:11
я хочу понять зачем (A*) перед operator new(2 * sizeof(A)); в выражении
C++
1
A *p = (A*)operator new(2 * sizeof(A));
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
11.07.2013, 14:22
Цитата Сообщение от soican Посмотреть сообщение
я хочу понять зачем (A*) перед operator new(2 * sizeof(A)); в выражении
Код C++
1
A *p = (A*)operator new(2 * sizeof(A));
operator new возвращает void *, поэтому нужно приведение типа.
"По хорошему" там надо ещё самому деструкторы вызывать перед освобождением памяти...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2013, 14:22
Помогаю со студенческими работами здесь

Выводит ошибку при создании динамического массива стрктур
#include &quot;pch.h&quot; #include &lt;iostream&gt; using namespace std; struct psh { string abc; double l; }; int main(){ ...

Не правильно выводит данные о пользователе
&lt;?php $query = mysql_query(&quot;SELECT * FROM `session` ORDER BY `putdate` DESC&quot;); $query1 = mysql_query(&quot;SELECT * FROM `users` WHERE...

Не правильно выводит данные код
Доброго времени суток такая проблема решил вывести формулу для эксперимента посмотрел на одном строй сайте подсчёт обоев, написал формулу...

Что не правильно в вводе динамического массива?
#define _CRT_SECURE_NO_WARNINGS #include &lt;stdio.h&gt; int main() { char *ch; int m,i,t; scanf(&quot;%d&quot;, &amp;m); ch =...

Не правильно удаляет столбец двумерного динамического массива
Вот вообщем код, вместо того что-бы удалить столбец он заменяеться на адрессы элементов. #include &quot;stdio.h&quot; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru