Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2018, 20:01   #1
tarstar
Пользователь
 
Регистрация: 18.11.2017
Сообщений: 18
Печаль Необходимо убрать из массива выбранный элемент

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

Код:
struct persons
{
	char firstName[20];
	char secondName[20];
	unsigned long long int phoneNumber;
};

struct phoneBook
{
	struct persons *contacts;
	int amountContacts;
};
struct phoneBook deleteContact ( struct phoneBook last )
{
	struct phoneBook newBook;
	int opt;
	int count = 0;
	newBook.contacts = malloc(sizeof(struct persons)*(last.amountContacts - 1));
	printf(" Chose how delete contact:\n");
	printf(" >>Enter 1 to delete by name\n");
	printf(" >>Enter 2 to delete by number\n");
	printf(" >");
	scanf("%dopt\n",&opt);
	// system("cls");
	if ( opt == 1 )
	{
		char *nameDelete;
		printf(" Enter name to delete:\n >");
		scanf("%snameDelete\n",&nameDelete);
		for ( int i = 0; i < last.amountContacts; i++)
		{
			if ( last.contacts[i].firstName == nameDelete ) break;
			else 
			{
				newBook.contacts[i] = last.contacts[i];
				count++;
			}
		}	
		for ( int j = last.amountContacts - count - 1; j < last.amountContacts - 1; j++)
		{
			newBook.contacts[j] = last.contacts[ j + 1 ];
		}
	}
	newBook.amountContacts = last.amountContacts - 1;
	

	return newBook;
}
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 25.03.2018 в 20:05.
tarstar вне форума Ответить с цитированием
Старый 25.03.2018, 22:02   #2
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию

Удалять можно только из списков. Нативный массив или область памяти не позволяют удалить отдельный элемент. Можно только скопировать хвост массива на шаг к началу.
СтудПом вне форума Ответить с цитированием
Старый 25.03.2018, 23:09   #3
tarstar
Пользователь
 
Регистрация: 18.11.2017
Сообщений: 18
По умолчанию

Я и пытаюсь просто перезаписать массив в другой без определенного элемента, "удаляется" другой элемент, думаю что-то с индексами, но сколько не пытался исправить ошибки, сделать правильно не получается((
tarstar вне форума Ответить с цитированием
Старый 25.03.2018, 23:20   #4
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию

Много букаф, мне не разобраться. Попробуйте примерно так
Код:
for (i=0; i<ArrayLen-1; ++i) if (i!=DelNumber) B[i-(i>DelNumber?1:0)]=A[i];

Последний раз редактировалось СтудПом; 25.03.2018 в 23:22.
СтудПом вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо убрать повторяющиеся столбцы victoria0 Microsoft Office Excel 4 26.11.2017 23:30
combobox - как при рисовании вручную перерисовать выбранный элемент Ilya48 C# (си шарп) 0 25.06.2012 15:42
Как заменить элемент элемент одномерного массива? Паскаль Женька Good Помощь студентам 5 21.12.2011 00:07
Одномерный массив. Необходимо заменить последний положительный элемент на второй элемент массива кумитэ Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2011 16:44