Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
#1

Удаление переменной структуры - C++

06.09.2014, 22:32. Просмотров 776. Ответов 15
Метки нет (Все метки)

Здравствуйте! Можете пожалуйста объяснить как удалить переменную структуры study1?
Смотрел похожие темы и по существу ничего не нашел.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
struct study
{
    char namef[30];
    char sname[50];
    int rate;
    int group;
    int numgeo;
    int nummath;
    int ua;
}  study1, study2, study3, study4, study5;
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2014, 22:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление переменной структуры (C++):

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Сравнение переменной со значением поля структуры - C++
Привет, не могу понять как все таки реализовать - есть структура struct spisok { char naim; }; ... spisok new;

Передача структуры без объявления переменной - C++
здравствуйте форумчане. вопрос мой таков: имеется структура struct Rect { Point LTPoint,RBPoint; } Point-структура...

Удаление записи из структуры - C++
Искал ключи к файлу, но кроме "r" "w" "a" больше не нашел. Помогите пожалуйста на С++ без всяких классов, при нажатии 2, можно было удалить...

Удаление динамической структуры - C++
Здраствуйте, вот кусок кода: #define max 32 typedef enum lightColor_t { RED, BLUE,

Удаление элемента структуры - C++
void list_del(list_head *list, int i){ if(list->head==NULL){printf("Заданного элемента не существует."); return;} list_node...

15
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
07.09.2014, 00:33 #2
Fake13, лучше набросай коротенький пример, демонстрирующий то, что ты хочешь получить.
А то в исходной постановке ответ на твой вопрос - "никак".
0
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 09:23  [ТС] #3
Если у студента двойки по таким предметам, то if-условие удовлетворено, оно выводит на экран сообщение и после этого надо добавить удаление структурной переменной (Study1) из общей структуры(Study), можно сказать, что просто имитируется отчисление. Просто не сильно понял как это сделать, только с помощью указателей?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
}  study1, study2, study3, study4, study5;
 
// Ввод данных я упущу. 
 
if (study1.numgeo && study1.nummath == 2)
{
cout << "Cтудент " << study1.sname << " имеет две и более двойки." << endl;
//Тут надо дописать удаление структурной переменной study1 из структуры Study. 
}
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
07.09.2014, 09:48 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В силу определенных причин давно никому не отвечал - не было сил помогать. Вы будете первым. Давайте попробуем разобраться в синтаксисе объявления структур в языке:
C++
1
2
3
4
struct <имя>
{
    <тело>
}<переменные>;
В вашем случае имя нового пользовательского типа данных "study", тело пользовательского типа данных состоит из публичных полей:
C++
1
2
3
4
5
6
7
    char namef[30];
    char sname[50];
    int rate;
    int group;
    int numgeo;
    int nummath;
    int ua;
А study1, study2, study3, study4, study5 - переменные, тип которых - study. В зависимости где было произведено объявление структуры - переменные были созданы либо в глобальной области видимости ( если структура объявлена вне main, либо в области видимости main. Память под переменные была выделена на стеке и будет автоматически освобождена при выходе из области видимости. При этом - переменные никак не включены в структуру, они имеют тип этой структуры, но структура не является контейнером для этих переменных.

Это равносильно постановке вопроса :
C++
1
2
int number1, number2, number3; 
// как вот тут удалить number1 из int
Ответ очевиден - никак, вопрос не корректен, переменная не помещается в тип данных, которому она соответствует.
Я советую Вам прочитать про массивы и контейнеры стандартной библиотеки - такие как std::vector.
2
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 10:02  [ТС] #5
Melg, спасибо больше за содержательный ответ, все понял.
0
zss
Модератор
Эксперт С++
6478 / 6041 / 1982
Регистрация: 18.12.2011
Сообщений: 15,654
Завершенные тесты: 1
07.09.2014, 10:35 #6
А динамически?
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
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
};
 int main()
{
  study* study1=new study;
  study* study2=new study;
  study* study3=new study;
  study* study4=new study;
  study* study5=new study;
// Ввод данных я упущу. 
 
if (study1->numgeo==2 && study1->nummath == 2)
{
cout << "Cтудент " << study1->sname << " имеет две и более двойки." << endl;
//Тут надо дописать удаление структурной переменной study1 из структуры Study.
    delete study1; 
}
0
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 10:46  [ТС] #7
zss, подчеркивает
C++
1
delete study1;
и пишет "Выражение должно иметь тип указателя".
0
zss
Модератор
Эксперт С++
6478 / 6041 / 1982
Регистрация: 18.12.2011
Сообщений: 15,654
Завершенные тесты: 1
07.09.2014, 10:50 #8
Цитата Сообщение от zss Посмотреть сообщение
study* study1=new study;
study* означает, что study1 имеет тип указателя. Проверьте наличие звездочки
0
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 10:52  [ТС] #9
Я понимаю, звездочка есть, все как в примере, точнее я скопировал код и выдает ошибку.
0
zss
Модератор
Эксперт С++
6478 / 6041 / 1982
Регистрация: 18.12.2011
Сообщений: 15,654
Завершенные тесты: 1
07.09.2014, 11:00 #10
Приведите полный код того, что компилируете.
0
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 11:26  [ТС] #11
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
#include <iostream>
#include <ctime>
#include <cstring>
 
using namespace std;
void input();
void sort();
void menu();
void first();
 
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
}  study1, study2, study3, study4, study5;
int main()
{
setlocale(LC_ALL, "RUS");
    
    menu();
    study* study1 = new study;
    study* study2 = new study;
    study* study3 = new study;
    study* study4 = new study;
    study* study5 = new study;
 
    system("pause");
    return 0;
} 
void input() // функции расписывать не буду, так как ошибка именно в if
 
if ((study1->numgeo && study1->nummath == 2 && stricmp(study1->namef, "ПОМ")) || (study1->numgeo && study1->ua == 2 && stricmp(study1->namef, "ПОМ")) || (study1->nummath && study1->ua == 2 && stricmp(study1->namef, "ПОМ")))
        {
            cout << "Cтудент " << study1.sname << " имеет две и более двойки." << endl;
            delete study1;
        }
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
07.09.2014, 11:45 #12
Цитата Сообщение от Fake13 Посмотреть сообщение
} *study1
Цитата Сообщение от Fake13 Посмотреть сообщение
study* study1
Измените объявление структуры на такое
C++
1
2
3
4
5
6
7
8
9
10
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
};
Как один из вариантов, конечно

Ну или наоборот
C++
1
2
3
4
5
6
7
8
9
10
struct study
{
    char namef[30];
    char sname[30];
    int cours;
    int group;
    int numgeo;
    int nummath;
    int ua;
}  *study1, *study2, *study3, *study4, *study5;
А потом так
C++
1
2
3
4
5
study1 = new study;
    study2 = new study;
    study3 = new study;
    study4 = new study;
    study5 = new study;
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.09.2014, 11:48 #13
Цитата Сообщение от Fake13 Посмотреть сообщение
я скопировал код и выдает ошибку
Криво скопировали. У zss код находится внутри функции main, у Вас же совершенно в неподходящем для этого месте.

Добавлено через 2 минуты
P.S. создавать множество однотипных объектов, объявляя для этого множество однотипных же переменных совершенно не подходящий подход. Лучше даже не пытаться это делать, а освоить такие понятия как "массив", "список" и прочие контейнерные классы.
0
Fake13
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 16
07.09.2014, 12:47  [ТС] #14
Только учусь потому и использую пока что не рациональные способы. У меня структура глобальная, она не находится в какой-либо функции, а динамику я засунул в main. KOPOJI, сделал так, как Вы говорили, все работает, но при вводе информации выкидывает ошибку нарушения прав доступа при записи по адресу. Надо указатели подучить.
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
07.09.2014, 15:00 #15
Fake13, видимо, вы опять что-то неверно сделали.
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
#include <iostream>
 
struct study
{
    const char *name;
    size_t mark;
} *study4, *study5, *study6;
 
int main(int argc, char *argv[])
{
    study* study1 = new study;
    study* study2 = new study;
    study* study3 = new study;
    study4 = new study;
    study5 = new study;
    study6 = new study;
 
    study1->name = "Student1";
    study1->mark = 5;
 
    study2->name = "Student2";
    study2->mark = 4;
 
    study3->name = "Student3";
    study3->mark = 3;
 
    study4->name = "Student4";
    study4->mark = 5;
 
    study5->name = "Student5";
    study5->mark = 2;
 
    study6->name = "Student6";
    study6->mark = 4;
 
    std::cout << study1->name << " => " << study1->mark << std::endl;
    std::cout << study2->name << " => " << study2->mark << std::endl;
    std::cout << study3->name << " => " << study3->mark << std::endl;
    std::cout << std::endl;
    std::cout << study4->name << " => " << study4->mark << std::endl;
    std::cout << study5->name << " => " << study5->mark << std::endl;
    std::cout << study6->name << " => " << study6->mark << std::endl;
 
    delete(study1);
    delete(study2);
    delete(study3);
    delete(study4);
    delete(study5);
    delete(study6);
 
    std::cin.get();
}
Удаление переменной структуры

З.Ы. Вообще, лучше создать массив структур вместо кучи переменных..
0
07.09.2014, 15:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2014, 15:00
Привет! Вот еще темы с ответами:

Удаление элемента структуры - C++
Есть код. Удаляет заданный элемент структуры. void list_del(list_head *list, int i){ if(list-&gt;head==NULL){printf(&quot;Список не...

Удаление структуры из файла - C++
Всем привет. У меня такая ситуация: записываю в бинарный файл заполненную структуру. Потом пользователь &quot;удаляет&quot; ее путем обнуления...

Возможно ли циклом менять название переменной структуры? - C++
Имеется структура: struct SPEC { char vuz1; char vuz2; char vuz3; }; Заполнение происходит так: for (i=0;i&lt;m;i++) ...

Структуры,доступ к элементу,сравнение поля с переменной. - C++
Вот что то я туплю со стуктурами((( есть функция в файле command.cpp void outMaxPrice(Marka* mark,int size) { Marka...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru