Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/23: Рейтинг темы: голосов - 23, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 11.01.2020
Сообщений: 62

Почему не выполняет повторно функцию addCont?

04.04.2020, 17:31. Показов 5454. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите разобрать. почти уверен, что неправильно выделена память в конструкторе (в нем через new, а в мейне пользуюсь realloc`ом). и почему в цикле do/while не заполняет массив повторно?

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#define _CRT_SECURE_NO_WARNINGS // директива использование функция со строками
#include<iostream>
#include"PhoneBook.h"
#include<Windows.h> //вывод кириллицы
#define _CRTDBG_MAP_ALLOC // проверка удаления памяти
#include <cstdlib>  // проверка удаления памяти
#include <crtdbg.h> // проверка удаления памяти
#include <stdlib.h> // библиотека для system("cls")
 
using namespace std;
 
char re(char*, char*, char*, char*&);
void addNumOfPhone(long&, long&, long long&);
void addCont(PhoneBook*& arr, int& n, char* rez, long homeNum, long workNum, long long mobNum);
void print(PhoneBook* arr, int n);
 
int main()
{
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int sizeOfArr = 128;
    char* surname = new char[sizeOfArr];
    char* name = new char[sizeOfArr];
    char* lastname = new char[sizeOfArr];
    char* rez = new char[sizeOfArr];
 
    cout << "Введите ФИО" << "\n";
    cout << "Фамилия: ";
    cin >> surname;
    cout << "Имя: ";
    cin >> name;
    cout << "Отчество: ";
    cin >> lastname;
    re(surname, name, lastname, rez);
    delete[]surname;
    delete[]name;
    delete[]lastname;
    long homeNum;           
    long workNum;
    long long mobNum;
    addNumOfPhone(homeNum, workNum, mobNum);
    int sizeofPhoneBook = 0;
    PhoneBook* obj;
    obj = NULL;
    string daNet;
    do
    {
        addCont(obj, sizeofPhoneBook, rez, homeNum, workNum, mobNum);
        system("cls");
        cout << "Хотите добавить еще абонента? (да/нет)\n";
        cin >> daNet;
    } while (daNet != "нет");
 
    print(obj, sizeofPhoneBook);
    delete[]rez;
    free(obj);
    _CrtDumpMemoryLeaks();
    return 0;
}
 
char re(char* a, char* b, char* c, char*& rez) // создание общей строки для ФИО
{
    rez = new char[strlen(a) + strlen(b) + strlen(c) + 3];
    strcat(strcat(strcat(strcat(strcpy(rez, a), " "), b), " "), c);
    return *rez;
}
 
void addNumOfPhone(long& homeNum, long& workNum, long long& mobNum)
{
    cout << "Введите домашний номер телефона: ";
    cin >> homeNum;
    cout << "Введите рабочий номер телефона: ";
    cin >> workNum;
    cout << "Введите мобильный номер телефона: +";
    cin >> mobNum;
}
 
void addCont(PhoneBook*& arr, int& n, char* rez, long homeNum, long workNum, long long mobNum)  //добавляем элемент в массив
{
    arr = (PhoneBook*)realloc(arr, (n + 1) * sizeof(PhoneBook));
    arr[n].setAdd(rez, homeNum, workNum, mobNum);
    n++;
}
 
void print(PhoneBook* arr, int n)
{
    for (int i = 0; i < n; i++)
        arr[i].getPrint();
}
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
#define _CRT_SECURE_NO_WARNINGS
#include "PhoneBook.h"
#include<iostream>
#include <cstring>
 
using namespace std;
 
PhoneBook::PhoneBook()  // пустой конструктор
{
    *fio = 0;
    homeNum = 0;
    workNum = 0;
    mobNum = 0;
    size = 0;
    contact = NULL;
}
 
PhoneBook::PhoneBook(int size, char*& fio, long& homeNum, long& workNum, long long& mobNum)
{
    this->size = size;
    contact = new PhoneBook[this->size];
    contact[size].setAdd(fio, homeNum, workNum, mobNum);
}
 
void PhoneBook::setAdd(char*& fio, long& homeNum, long& workNum, long long& mobNum)
{
    this->fio = new char[strlen(fio) + 1];
    strcpy(this->fio, fio);
    this->homeNum = homeNum;
    this->workNum = workNum;
    this->mobNum = mobNum;
}
 
void PhoneBook::getPrint()
{
    cout << "ФИО: " << fio;
    cout << "\nДомашний телефон: " << homeNum;
    cout << "\nРабочий телефон: " << workNum;
    cout << "\nМобильный телефон: +" << mobNum;
}
 
PhoneBook::~PhoneBook()
{
    delete[] fio;
    delete[] contact;
    cout << "\n";
}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
class PhoneBook
{
private:
    char* fio;
    PhoneBook* contact;
    long homeNum;
    long workNum;
    long long mobNum;
    int size;
public:
    PhoneBook();
    PhoneBook(int, char*&, long&, long&, long long&);
    void setAdd(char*&, long&, long&, long long&);
    void getPrint();
 
    ~PhoneBook();
};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2020, 17:31
Ответы с готовыми решениями:

Почему строка из файла считывается повторно?
Здравствуйте! Скажите, пожалуйста, почему последняя строка из файла может считываться повторно? Например: ...

Почему конструктор вызывается повторно при преобразовании типов?
В качестве примера предлагаю рассмотреть примерчик из учебника. В примере мы создаём класс, содержащий в качестве поля строку символов и...

Почему PDO не выполняет запрос?
Мой код ?php set_time_limit(100); session_start(); require&quot;conect.php&quot;; $pdo-&gt;setAttribute(PDO::ATTR_ERRMODE,...

64
1 / 1 / 0
Регистрация: 11.01.2020
Сообщений: 62
12.04.2020, 21:06  [ТС]
Студворк — интернет-сервис помощи студентам
теперь начало выводить, но показывает 0
Миниатюры
Почему не выполняет повторно функцию addCont?  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.04.2020, 21:10
Цитата Сообщение от ttshkalol Посмотреть сообщение
теперь начало выводить, но показывает 0
В setAddHum не сохраняешь количество
0
1 / 1 / 0
Регистрация: 11.01.2020
Сообщений: 62
12.04.2020, 21:23  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
В setAddHum не сохраняешь количество
поправил. но теперь вылетает вот тут
C++
1
2
3
4
void getShow()
    {
        cout << fio <<"\n";
    }
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.04.2020, 21:28
Цитата Сообщение от ttshkalol Посмотреть сообщение
поправил. но теперь вылетает вот тут
Потому что fio здесь равно Null. Ты его не сохраняешь в setInputFio
0
1 / 1 / 0
Регистрация: 11.01.2020
Сообщений: 62
12.04.2020, 21:36  [ТС]
получилось)) Большое спасибо!!! Вам в преподаватели надо) мне вот так не повезло с преподавателем ппц просто. он ту задачу, которую вы мне помогли решить, так и не смог сделать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2020, 21:36

Почему spring security не выполняет своих обязятельств?
Здравствуйте. Помогите, пожалуйста, решить следующую проблему. Пытаюсь поднять spring security Его конфигурация ...

Не понимаю почему не выполняет проверку на квадратный корень
условие задачи: Вычислите sqrt(x−sqrt(y)), если x и y вводит пользователь. Перед вычислением выполнить проверку на существование квадратных...

Ф5 выполняет функцию кнопки sabmit
При обновлении страницы САМА нажимается кнопка Submit(вычисление и обновление БД). Подскажите новичку, как сделать так, что бы на странице...

Нить не выполняет свою функцию
Имеется следующий код: public class Solution { String name1 = &quot;Оля&quot;; String name2 = &quot;Лена&quot;; public static void...

Какую функцию выполняет оператор **
Наткнулся на оператор ** в статье про арифметические операции. Вот что там написано: To exponentiate two types, the ** exponentiation...


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

Или воспользуйтесь поиском по форуму:
65
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru