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

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

10.07.2013, 22:11. Показов 2738. Ответов 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
49 / 23 / 3
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
11.07.2013, 14:26
Студворк — интернет-сервис помощи студентам
а на http://www.cplusplus.com/refer... ator%20new пишут в примере
C++
1
 MyClass * p3 = (MyClass*) ::operator new (sizeof(MyClass));
зачем эти ":: " перед operator new?
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
11.07.2013, 14:32
Цитата Сообщение от soican Посмотреть сообщение
зачем эти ":: " перед operator new?
Явно указывают, что
C++
1
operator new
находится в глобальной области видимости.
0
49 / 23 / 3
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
11.07.2013, 14:56
Цитата Сообщение от gray_fox Посмотреть сообщение
находится в глобальной области видимости.
т.е. грубо говоря этот оператор объявит глобальную переменную?
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
11.07.2013, 15:05
Цитата Сообщение от soican Посмотреть сообщение
т.е. грубо говоря этот оператор объявит глобальную переменную?
Нет, он (оператор) объявлен в глобальной области видимости.
0
49 / 23 / 3
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
11.07.2013, 15:36
Цитата Сообщение от gray_fox Посмотреть сообщение
Нет, он (оператор) объявлен в глобальной области видимости.
я пока не дошёл до понимания глобальной области видимости(я использую "::" когда описывал функции в классах)
кстати ещё один интересный пример:
C++
1
MyClass * p3 = static_cast<MyClass*> (::operator new (sizeof(MyClass[5])));
здесь static_cast используется вместо приведения типов

Добавлено через 3 минуты
кстати alsav22 пишет
operator delete(p);
а http://www.cplusplus.com/refer... ator%20new[]/ пишет просто
delete[] p3;
Добавлено через 3 минуты
[]/ почему то не присоединено к ссылке поэтому кидает в другое место
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
11.07.2013, 15:45
Цитата Сообщение от soican Посмотреть сообщение
здесь static_cast используется вместо приведения типов
Это и есть приведение типов.
Цитата Сообщение от soican Посмотреть сообщение
кстати alsav22 пишет
operator delete(p);
а http://www.cplusplus.com/refer... ator%20new[]/ пишет просто
delete[] p3;
operator delete только освобождает память (a la free). delete[] - это вызов деструкторов, потом operator delete .
0
49 / 23 / 3
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
11.07.2013, 15:49
Цитата Сообщение от gray_fox Посмотреть сообщение
Это и есть приведение типов.
блин, вот зачем тогда он нужен - только чтоб людям мозги пудрить
Цитата Сообщение от gray_fox Посмотреть сообщение
operator delete только освобождает память (a la free). delete[] - это вызов деструкторов, потом operator delete .
получается это одно и тоже двумя способами
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
11.07.2013, 16:00
Цитата Сообщение от soican Посмотреть сообщение
блин, вот зачем тогда он нужен - только чтоб людям мозги пудрить
С++-style касты безопаснее, чем C-style cast (который по сути static_cast + const_cast + reinterpret_cast).

Добавлено через 1 минуту
Цитата Сообщение от soican Посмотреть сообщение
получается это одно и тоже двумя способами
Нет же, operator delete не вызывает деструктор(ы), только освобождает память.
0
49 / 23 / 3
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
11.07.2013, 16:03
Цитата Сообщение от gray_fox Посмотреть сообщение
Нет же, operator delete не вызывает деструктор(ы), только освобождает память.
я понял, я имел ввиду в этом случае
0
6 / 6 / 7
Регистрация: 14.04.2010
Сообщений: 101
11.07.2013, 19:52  [ТС]
ребят, спасайте
вот приложение консольное

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
int *mem_arr; //для динам массива
    int i;
    int cnt;
    printf ("\n Input array size:");
    scanf("%d",&cnt);
    mem_arr = (int *)malloc(cnt*sizeof(int)); // для динам массива
    
    for(int i=0;i<cnt;i++)
    {
        printf("x[%d]=",i);
        scanf("%d",&mem_arr[i]);
    }
 //вывожу
 
    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';
    free(mem_arr);
    free(mem_arr_2);
    file_out.close();
пытаюсь это же сделать в MFC используя динамический массив, ничего не получается у меня(
в итоге выводится примерно так

Array R[]={
-xxxxxxx,
-xxxxxxx,
457,
-xxxxxxx,
-xxxxxxx,
}

т.е последнее посчитанное число он выводит правильно, о остальные элементы массива заполняет неведомой херней(
когда точно размер массива задаю, то все получается хорошо , например R [15]

заранее неизвестно какого размера массив задается
как сделать так, что бы сколко раз я щелкнул на мышке(кнопка расчет), столько и записалось бы в массив




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
40
41
42
43
44
45
46
47
48
49
50
51
    int v1;         //  Для математических операций
    int v2;         //  Для математических операций
    int res;        //  Для математических операций
 
    int i ;
    int *mem_arr = 0; // Динамич
    int cnt = 20; // Динамич
 
    //int mem_arr[15];  //Обычный массив
 
void CArr_newDlg::OnBnClickedButton1() // кнопка расчета 
{
    UpdateData(TRUE);
 
    CString str;
 
    v1 = v_value_1; //получаю 1ое число
    v2 = v_value_2; //получаю 2ое число
    res = v1 + v2;  // складываю 1 и 2
    v_value_res = res;  // результат вывожу в окошко
            
    mem_arr = (int *)malloc(cnt*sizeof(int));   // Динамич массив для результатов
    *(mem_arr+i)=res;                           // для след результат (после нового сложения) 
    i++;                                        // Динамич
 
    str.Format(_T("%d"),int(res)); // вывожу в лист бокс
    c_list.AddString(str);
    
    //*(mem_arr + i) = res; // Обычный массив
    //++i;                  // Обычный массив
        
    UpdateData(FALSE);
}
 
 
void CArr_newDlg::OnBnClickedButton2() // кнопка сохранить и вывести в массив
{ 
    ofstream file_out("c:/Arr_data.txt",ios::out);
    //file_out << "Array R[]" << " = {" <<"\n";             // Обычный массив 
    file_out << "Array R[" << cnt << "]" << "={" <<"\n";    // Динамич
     
    int c;
    //for(c = 0; c < 15; 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();
}
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2013, 23:25
Цитата Сообщение от gray_fox Посмотреть сообщение
"По хорошему" там надо ещё самому деструкторы вызывать перед освобождением памяти...
Самому деструкторы вызывать, насколько я понял, дурной тон? Или в этом случае нужно?

Добавлено через 58 минут
Тогда так?
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
40
41
42
43
44
45
#include <iostream>
#include <cstdlib>
#include <new>
using namespace std;
 
class A
{
    int x;
public:
    A(int a)
    {
        x = a;
        cout << "A" << endl;
    }
    
    ~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;
 
   p ->~A();
   (p + 1) ->~A();
   
   operator delete(p);
   
   system("pause");
   return 0;
}
Добавлено через 4 минуты
Но непонятно: что, собственно, даёт вызов деструктора? Он же ничего не делает.
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
12.07.2013, 01:16
alsav22, здесь ничего не даёт (т.к. деструктор пустой по сути). В общем случае - надо вызывать.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2013, 01:30
Цитата Сообщение от gray_fox Посмотреть сообщение
alsav22, здесь ничего не даёт (т.к. деструктор пустой по сути). В общем случае - надо вызывать.
Когда-то пытался выяснить: а что вообще делает деструктор (конкретно)? Например, деструктор по умолчанию. Так и не понял.
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
12.07.2013, 01:33
Цитата Сообщение от alsav22 Посмотреть сообщение
деструктор по умолчанию
Очевидно ничего. Надо просто знать, что вызов operator delete не приводит к вызову деструктора.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2013, 01:33

Выводит ошибку при создании динамического массива стрктур
#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...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru