Удаление элемента из массива строк - C (СИ)
Формулировка задачи:
Не получается как-то удалить определенную запись. Код ниже. Мб кто-то знает как
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> int i,j; struct prices { char name[80]; char country[80]; int price; char del[80]; }; //*Ввод Элементов*// void input(struct prices m[],int n) { for(i=0;i<n;i++) { fflush(stdin); puts("Enter name:"); gets(m[i].name); puts("Enter country:"); gets(m[i].country); printf("Enter price:\n"); scanf("%d",&m[i].price); fflush(stdin); } } //*Вывод Элементов*// void output(struct prices m[],int n) { for(i=0;i<n;i++) { printf(" --- Name: %s\n",m[i].name); printf(" --- Country: %s\n",m[i].country); printf(" --- Price: %d\n\n",m[i].price); } } int main() { struct prices m[10],b[10]; int n; printf("Enter size of array: "); scanf("%d",&n); input(m,n); system("cls"); output(m,n); printf("\n\n***Delete element from structure***\n\n"); puts("Enter element:"); gets(m[i].del); for(i=0; i<n; i++) { if (strcmp(m[i].del,m[i].name)!=0) { strcpy(b[i].name,m[i].name); strcpy(b[i].country,m[i].country); b[i].price=m[i].price; } n--; } for(i=0;i<n;i++) { printf(" --- Name: %s\n",m[i].name); printf(" --- Country: %s\n",m[i].country); printf(" --- Price: %d\n\n",m[i].price); } return 0; }
Решение задачи: «Удаление элемента из массива строк»
textual
Листинг программы
j=0; for(i=0; i<n; i++) { if (strcmp(del,m[i].name)!=0) { strcpy(b[j].name,m[i].name); strcpy(b[j].country,m[i].country); b[j].price=m[i].price; j++; } } for(i=0;i<j;i++) { printf(" --- Name: %s\n",b[i].name); printf(" --- Country: %s\n",b[i].country); printf(" --- Price: %d\n\n",b[i].price); }
Объяснение кода листинга программы
- В начале программы объявляются две переменные:
j
иi
, которые будут использоваться в циклах. Переменнаяj
инициализируется значением 0, а переменнаяi
не инициализируется. - Затем идет цикл
for
, который выполняетсяn
раз, гдеn
- это количество элементов в массивеm
. В каждой итерации цикла происходит проверка: если значениеm[i].name
не равноdel
(то есть, не равно строке, которую мы хотим удалить), то выполняется следующий блок кода. - Внутри блока кода происходит следующее:
- Значение
m[i].name
копируется в элемент массиваb
с индексомj
. - Значение
m[i].country
копируется в элемент массиваb
с индексомj
. - Значение
m[i].price
присваивается элементу массиваb
с индексомj
. - Индекс
j
увеличивается на 1.
- Значение
- После завершения первого цикла, идет второй цикл
for
, который выполняетсяj
раз (количество элементов в массивеb
). В каждой итерации цикла выводятся значения элементов массиваb
. - Значения, которые выводятся, это:
b[i].name
(название)b[i].country
(страна)b[i].price
(цена)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д