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

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

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

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

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 2
power12, сначала освобождаете память (free(mem_arr)), потом пользуетесь ею - надо наоборот, освобождать память, когда она уже не нужна.
1
Модератор
Эксперт по электронике
8958 / 6724 / 921
Регистрация: 14.02.2011
Сообщений: 23,733
10.07.2013, 22:21 3
Цитата Сообщение от power12 Посмотреть сообщение
free(mem_arr);
все нет у тебя больше памяти
отобрала система
может и свое что нибудь написать
или указатель поскольку уже невалидный может в другое место указывать
0
10.07.2013, 22:44 4

Не по теме:

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

0
Модератор
Эксперт по электронике
8958 / 6724 / 921
Регистрация: 14.02.2011
Сообщений: 23,733
10.07.2013, 22:48 5
Цитата Сообщение от soican Посмотреть сообщение
не люблю малоки алоки, откуда они вообще такие взялись?!
из Си
иногда даже очень необходимы
например выделить память без вызова конструктора
или есть еще такая штука realloc (с new такого не сделаешь)
перераспределить память
0
6 / 6 / 7
Регистрация: 14.04.2010
Сообщений: 101
10.07.2013, 22:53  [ТС] 6
, сначала освобождаете память (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 7
Цитата Сообщение от 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  [ТС] 8
а как быть с выводом?
в 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
Модератор
Эксперт по электронике
8958 / 6724 / 921
Регистрация: 14.02.2011
Сообщений: 23,733
11.07.2013, 00:01 9
Цитата Сообщение от 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  [ТС] 10
Цитата Сообщение от ValeryS Посмотреть сообщение
ну напиши так
не не)) я про запятую, которая выводится в файл

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

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

что бы было

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

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

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

и как у тебя получилось
Цитата Сообщение от power12 Посмотреть сообщение
for(int c = 0; c < 6; c++)
а в файле 4 цифры?
чей то ты недоговариваешь
0
6 / 6 / 7
Регистрация: 14.04.2010
Сообщений: 101
11.07.2013, 00:15  [ТС] 12
Цитата Сообщение от 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
Модератор
Эксперт по электронике
8958 / 6724 / 921
Регистрация: 14.02.2011
Сообщений: 23,733
11.07.2013, 00:19 13
на, пробуй
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  [ТС] 14
Цитата Сообщение от ValeryS Посмотреть сообщение
на, пробуй
спасибо) только не пойму как он выводит

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

C++ Скопировано
1
file_out << dec << mem_arr[c]<< "\n";
тут я завис...)
0
Модератор
Эксперт по электронике
8958 / 6724 / 921
Регистрация: 14.02.2011
Сообщений: 23,733
11.07.2013, 00:41 15
Цитата Сообщение от 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 16
Цитата Сообщение от ValeryS Посмотреть сообщение
из Си
иногда даже очень необходимы
например выделить память без вызова конструктора
В С++ для этого есть operator new.
0
Модератор
Эксперт по электронике
8958 / 6724 / 921
Регистрация: 14.02.2011
Сообщений: 23,733
11.07.2013, 09:31 17
Цитата Сообщение от alsav22 Посмотреть сообщение
В С++ для этого есть operator new.
покажь
есть класс A
нужно выделить память под несколько экземпляров класса не вызывая при этом конструктор
переводить в char?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 10:12 18
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 19
я хочу понять зачем (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 20
Цитата Сообщение от 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
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Организация масштабируемого хранилища с Apache Cassandra
Codd 14.03.2025
Изначально разработанная в Facebook, а затем переданная Apache Software Foundation, Cassandra сочетает в себе принципы Amazon's Dynamo и Google's BigTable. Эта комбинация создает уникальную. . .
Kafka или Pulsar: Что лучше для потоковой обработки в Java
Javaican 14.03.2025
Среди множества решений для потоковой обработки данных Apache Kafka долгое время удерживала лидирующие позиции, став де-факто стандартом в индустрии. Однако в последние годы всё больше внимания. . .
Создание и использование компонентов в Vue 3
Reangularity 14.03.2025
Компонент в Vue - это автономный блок интерфейса, который содержит собственную разметку, логику и стили. Представьте себе кнопку, форму ввода или даже целую панель навигации - всё это можно оформить. . .
Vue 3: Создаем современное веб-приложение с Composition API
Reangularity 14.03.2025
В фронтенд-разработке Vue 3 выделяется своим прагматичным подходом. В отличие от React с его минималистичной философией "всё — JavaScript" или Angular с его всеобъемлющим корпоративным подходом, Vue. . .
Разработка контекстных меню в iOS
mobDevWorks 14.03.2025
С приходом iOS 13 Apple представила новый API для контекстных меню, который полностью заменил предыдущую технологию 3D Touch peek & pop. Хотя многие разработчики и пользователи испытывают ностальгию. . .
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
Real PATH definitions in bash scripts
jigi33 13.03.2025
Как поймать путь и путь к директории относительно запускаемого файла в BASH 1. поймать путь через вывод $(pwd) 2. более правильно - на основе realpath (см. скриншот)
Django или Flask: что выбрать для веб-разработки на Python
py-thonny 13.03.2025
Django – это высокоуровневый фреймворк, который придерживается философии "всё включено". Он предоставляет разработчику готовые решения для большинства типичных задач веб-разработки: от аутентификации. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер