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

Удалить элемент из массива структур

04.06.2012, 21:54. Показов 2082. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо удалить элемент из массива структур. Удаление производится что показывает этот код. Но записать в файл как ни пробовал не получается.

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
struct gai 
{char FIO[25];
 
}st[100];
 
FILE *f;
int n=5;
 
void input()
//функция ввода и хранения данных 
{ f=fopen("gai.txt","rb+");
char s='\0';
 int i;
 system("cls");
   for(i=n;i<100;i++)
     {fflush(stdin);
      system("cls");
      printf("%d",n);
      printf("\nФамилия И.О.: ");
      gets(st[i].FIO);
      n++;
      fwrite(&st [i],sizeof(st[i]),1,f);
      printf("\nПродожить ввод (д/н): ");
      fflush(stdin);
      s=getchar();
      if (s=='н' || s=='Н') i=100;
     }
     fclose(f);  
   }
}
 
 
void udalenie()
{ f=fopen("gai.txt","rb+");
   system("cls");
   fflush(stdin);
    int i=n,j=0,sd[100];
    char s[30];
    for(j=0;j<n;j++)
    sd[j]=1;
    printf("Введите фамилию\n");
    scanf("%s",&s);
    for(j=0;j<n;j++)
       {fread(&st[j],sizeof(st[j]),1,f); 
            if(strcmp(st[j].FIO,s)==0)
               {sd[j]=0;
                 i--;
                }
        }
 
for(int j=0;j<n;j++)
    if (sd[j]!=0)
       {fread(&st[j],sizeof(st[j]), 1, f);
         printf("\n%17s",st[j].FIO);
         fflush(stdin); 
        }
 
 
 
 
int main()
//главная функция
{fflush(stdin);
char s='\0';
do  
   {system("cls");
    printf("\n\nБаза данных ГАИ \n");
    printf("Выберите действие: \n");
    printf("1 - Ввод данных \n");
    printf("2 - Удалить данные\n");
   printf("3 - Выход\n");
    s=getchar();
    switch(s)
      {case '1':input();break;
       case '2':udalenie();break;
      }
   }
   while (s!='3');
}
Вот такой код
Добавлено через 3 часа 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
list *clist()
//Формирование списка
{fflush(stdin); 
 list *now,  *pred, *tek, *first=NULL;
 f = fopen("d:\\gai2.txt", "rb");
 while (fread(&sttt,sizeof(sttt),1,f))
{now=new list;
 now->svd = sttt;
 now->next = NULL;
 if (!first)
   first = now;
 else
  {tek=first;
   pred=NULL;
   while (tek && strcmp(tek->svd.FIO, now->svd.FIO) < 0)
      {pred = tek;
       tek = tek->next;
       }
    if (!pred)
        {now->next = tek;
         first = now;
        }
    else
        {now->next = tek;
         pred->next = now;
        }
   }
  
 }
 return first;
}
 
 
list tdelete()
{   char FIO[25]; f = fopen("d:\\gai2.txt", "rb");
   list* pred = NULL; list* lst = NULL;
   fflush(stdin);
   printf("vvedite fam\n");
   gets(FIO);
   while (fread(&sttt,sizeof(sttt),1,f))
   {lst = clist();
   for (list *begin = lst; begin; begin = begin->next)
   {
      if (strcmp(begin->svd.FIO, FIO) == 0)
        {if (begin == lst)
            { lst = begin->next;
              delete begin;
             }
         else
            {list* to_delete = begin;
             begin = begin->next;
             pred->next = begin;
             delete to_delete;
            }
        }
     pred = begin;
   }
}
}
 
 
list spisok()//вывод на экран
{f = fopen("d:\\gai2.txt", "rb");
 list *first=NULL;
 first=clist();
  while (first)
    {printf("\n%s",first->svd.FIO);
     first=first->next;
     }
     getch();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2012, 21:54
Ответы с готовыми решениями:

Если элемент найден, то удалить его и следующий за ним элемент из массива
Сформировать массив x, упорядоченный по убыванию. Определить, содержит ли он заданное число. Если элемент найден, то удалить его и...

Удалить первый отрицательный элемент массива, если такой элемент есть
1. Удалить первый отрицательный элемент массива, если такой элемент есть. 2. Вставить два элемента с данными значениями: первый – после...

Как передвигать указатель на следующий элемент массива структур?
Вопрос относительно использования символа стрелка '-&gt;'. Допустим, есть такой код: #include&lt;iostream&gt; using namespace std; ...

2
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
04.06.2012, 22:08
заведи флаг bool flag, который равен true, если переменная "занята" и false, если свободна. И работай в массиве только с теми переменными, чей флаг true. Также и запись в файл. Сначала проверка на заполненность, а потом только запись.
0
41 / 1 / 2
Регистрация: 11.10.2011
Сообщений: 112
04.06.2012, 22:51  [ТС]
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
struct list
{gai svd;
 list *next;
}*first=NULL;
 
list *clist()
//Формирование списка
{ fflush(stdin);    
 list *now,  *pred, *tek;
 f = fopen("d:\\gai2.txt", "rb");
 while (fread(&sttt,sizeof(sttt),1,f))
{now=new list;
 now->svd = sttt;
 now->next = NULL;
 if (!first)
   first = now;
 else
  {tek=first;
   pred=NULL;
   while (tek && strcmp(tek->svd.FIO, now->svd.FIO) < 0)
      {pred = tek;
       tek = tek->next;
       }
    if (!pred)
        {now->next = tek;
         first = now;
        }
    else
        {now->next = tek;
         pred->next = now;
        }
   }
  
 }
 return first;
}
 
 
list tdelete()
{   char FIO[25]; 
   list* pred = NULL; 
   fflush(stdin);
   printf("vvedite fam\n");
   gets(FIO);
   for (list *begin = first; begin; begin = begin->next)
   {
      if (strcmp(begin->svd.FIO, FIO) == 0)
        {if (begin == first)
            { first = begin->next;
              delete begin;
             }
         else
            {list* to_delete = begin;
             begin = begin->next;
             pred->next = begin;
             delete to_delete;
            }
        }
     pred = begin;
   }
 
}
 
 
list spisok()//вывод на экран
{f = fopen("d:\\gai2.txt", "rb");
 first=clist();
  while (first)
    {printf("\n%s",first->svd.FIO);
     first=first->next;
     }
     getch();
}
Добавлено через 24 минуты
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
struct list
{gai svd;
 list *next;
}*first=NULL;
 
list *clist()
//Формирование списка
{ fflush(stdin);    
 list *now,  *pred, *tek;
 f = fopen("d:\\gai2.txt", "rb");
 while (fread(&sttt,sizeof(sttt),1,f))
{now=new list;
 now->svd = sttt;
 now->next = NULL;
 if (!first)
   first = now;
 else
  {tek=first;
   pred=NULL;
   while (tek && strcmp(tek->svd.FIO, now->svd.FIO) < 0)
      {pred = tek;
       tek = tek->next;
       }
    if (!pred)
        {now->next = tek;
         first = now;
        }
    else
        {now->next = tek;
         pred->next = now;
        }
   }
  
 }
 }
 
 
list tdelete()
{   char FIO[25]; f = fopen("d:\\gai2.txt", "rb");
   list* pred = NULL; 
   fflush(stdin);
   printf("vvedite fam\n");
   gets(FIO);
    for (list *begin = first; begin; begin = begin->next)
   {
      if (strcmp(begin->svd.FIO, FIO) == 0)
        {if (begin == first)
            { first = begin->next;
              delete begin;break; 
             }
         else
            {list* to_delete = begin;
             begin = begin->next;
             pred->next = begin;
             delete to_delete;break; 
            }
        }
     pred = begin;
   }
 
}
 
list spisok()//вывод на экран
{f = fopen("d:\\gai2.txt", "rb");
 list *cur = first;
  while (cur)
    {printf("\n%s",cur->svd.FIO);
     first=cur->next;
     }
     getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.06.2012, 22:51
Помогаю со студенческими работами здесь

Удалить из массива элемент и вставить на нужное место элемент q, так, чтобы не нарушалась упорядоченность
Здравствуйте! Вот сама задача Заданы целочисленный массив а1,а2...аn упорядоченный по не возрастанию элементов и целочисленные переменные...

Проверить, упорядочены ли элементы, заменить первый нулевой элемент и удалить указанный элемент из массива
Найти произведение отрицательных элементов массива, следующих после первого положительного элемента. Если по какой-либо причине вычислить...

Удалить каждый K элемент массива пока не останется 1 элемент
Есть задача удалить каждый K элемент массива пока не останется 1 уцелевший. Вот пример вводим N к-лово элементов в нумерации ...

Удалить из массива элемент, стоящий в центре (если количество элементов в массиве чётное, то удалить средние два элемента).
Удалить из массива элемент, стоящий в центре (если количество элементов в массиве чётное, то удалить средние два элемента).

Удалить первый нулевой элемент массива и добавить после каждого чётного элемента особый элемент
Здравствуйте! Имеется такая задача: 1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2) Распечатать...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru