Поскольку вы используете массив Telbook
, вы не можете удалить.Это, вероятно, то, что вы нашли, прочитав.Тип удаления, который упоминается здесь, - это удаление места для элемента, который нужно удалить.И это невозможно при использовании массива.В C ++ массивы имеют фиксированный размер, так как ваш жесткий диск имеет фиксированный размер (вы не можете удалить купленное место).
Теперь удаление может относиться к точке зрения пользователя, это означает, что при условии, чтоприложение представляет данные пользователю, как будто некоторые данные могут быть удалены, такое удаление является вопросом кодирования информации (вы можете удалять файлы, но это не физическое удаление пространства, просто логическое удаление, данные никогда не представляются вам снова, вот и все).
Тогда в вашем случае вы либо меняете способ управления используемой памятью (например, с помощью динамического выделения - new / delete - для выделения и удаления места в вашей запущенной программе), либо используете какой-то видкодирование для представления того факта, что некоторые записи в массиве с фиксированным размером не соответствуют чему-либо и должны рассматриваться как «свободные».
В вашем случае функция ki
может помочь вам:
void ki(Telbook n[]){
int i=0;
while(n[i].num){
printf("Name: %s, Phone #: %llu\n",n[i].name,n[i].num);
i++;
}
}
Как написано, допустимые записи в массиве - это те, которые проиндексированы от начала до той, для которойПоле h num
равно 0. Таким образом, логика, лежащая в основе сохранения, такова: любой элемент TelBook
, для которого num
равно 0, является «свободным» или хранится с индексом, превышающим элемент, для которого num
равенк нулю.
Тогда что-то вроде:
void ddelete(Telbook n[]){
int szam,db=count(n),i=0,adat;
printf("Enter a number you want to delete: ");
scanf("%d",&szam);
for(i = 0; i < db; i++) {
if (szam == n[i].num){
for (j = i; j < db - 2; j++) { // copy elements at the end, one pos to the left
n[j] = n[j + 1];
}
n[db-1].num = 0; // ensure the last element is effectively a free one
return; // stop here, no need to continue
}
}
}
Но это также предполагает, что все записи TelBook
были правильно инициализированы, что не так, измените на (как минимум):
Telbook tomb[50];
tomb[0].num = 0;
Могут существовать некоторые другие проблемы, но теперь вам придется немного поработать самостоятельно.