Удаление элемента из массива строк - 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(цена)