Я делаю телефонную книгу на C, но у меня проблема с опцией удаления.Удалить элемент из массива в C
Например, моя телефонная книга состоит из
- Добавить имя
- показать имена имени
- удалить (это опуская другие параметры, такие как номер телефона, адрес и т.д.)
Когда я удаляю контакт, используя опцию 3 rd, и я перехожу на 2 nd, список с именами, которые я h ave сохранен, но отображается без имени, которое я удалил. Но это повторяет мне последнюю позицию.
Вот код:
#include <cstdio>
#include <cstdlib>
#include <cstring>
char name[5][20];
char aux[20];
int position;
int op;
void menu();
void add();
void show();
void show_remove();
//void remove();
void pause();
int main()
{
menu();
return 0;
}
void menu()
{
do{
system("clear");
printf("\tMAIN MENU\n\n");
printf("Choose one of the next options: \n\n");
printf("1.....Add a name\n");
printf("2.....Show the names in the register\n");
printf("3.....Delete a name on the register\n");
printf("4.....Exit\n");
printf("Choose your option: ");
scanf(" %i", &op);
system("clear");
switch(op)
{
case 1:
add();
break;
case 2:
show();
break;
case 3:
show_remove();
break;
case 4:
printf("\nEnd of the program");
pause();
}
}while(op!=4);
}
void pause()
{
printf("\n\nPress ENTER to continue\n");
getchar();
getchar();
}
void add()
{
printf("\tADD THE NAMES\n\n");
for(int i=0; i<5; i++)
{
printf("Name in [%i]: ", i);
scanf(" %[^\n]", name[i]);
}
pause();
}
void show_remove()
{
int i,j,x;
for(i=0; i<5-1; i++)
{
for(j=i+1; j<5; j++)
{
x=strcmp(name[i], name[j]);
if(x>0)
{
strcpy(aux, name[i]);
strcpy(name[i], name[j]);
strcpy(name[j], aux);
}
}
}
printf("\tADDED NAMES\n");
for(i=0; i<5; i++)
{
printf("\nName in [%i]: %s", i, name[i]);
}
printf("\n\n'1' yes, '0' no.");
printf("\nDo you want to delete an element from array? 1/0:");
scanf(" %i", &op);
if(op==1)
{
printf("\n\nAdd the index that you wish to delete: ");
scanf(" %i", &position);
if(position>=5)
{
printf("Can't be deleted!");
}
else
{
for(i=position; i<5-1; i++)
{
x=strcmp(name[i], name[i+1]);
if(x<0)
{
strcpy(name[i], name[i+1]);
}
}
printf("\nArray after the elimination: \n");
for(i=0; i<5-1; i++)
{
printf("\nElementsof the array [%i]: %s", i, name[i]);
}
pause();
}
}
else
{
pause();
}
}
void show()
{
printf("\tADDES NAMES\n\n");
{
for(int i=0; i<5; i++)
{
printf("\nElements of the array [%i]: %s", i, name[i]);
}
}
pause();
}
Пример в примере, пример? –
'5-1' вы знаете, что это то же самое, что' 4'? :-) – kaylum
Функция 'show' всегда печатает 5 имен. Вам нужно напечатать меньше имен, если вы удалите их. Используйте переменную для отслеживания количества имен. – Kevin