Одна проблема в том, что ваша проверка для i == n
выполнена после , когда вы проиндексировали массив с помощью i
.Чтобы исправить это, вы должны увеличить i
перед проверкой.Например:
i++; // Increment first
if(i==n){ // then check
printf("\nCode not found!\n\n");
cont = false; //loop ends when there are no matches
}
Другая проблема заключается в том, что вы не обрабатываете случай, когда n
равен нулю.В общем, я думаю, что while(i < n) { ... };
- лучший подход, чем do { ...} while(...);
.
Также обратите внимание, что этот код (в настоящее время закомментированный) неверен:
// item[pos].name = item[pos+1].name;
Вы не можетескопировать строку с помощью присваивания (например, =
).Вам нужно будет использовать strcpy
Также я не вижу обновления count
при удалении элемента.Я думаю, это ошибка ... Я бы предположил, что count
должно быть уменьшено.
Наконец, я не вижу функцию, возвращающую какое-либо значение.Это также ошибка, поскольку вы определяете функцию, возвращающую int
.
Примечание ...
Использование флага типа cont
для завершения while
цикл будет работать нормально и поэтому не является ошибкой.Тем не менее, вам не нужен флаг.Вы можете использовать break
, например:
do{
...
...
if(i==n){
printf("\nCode not found!\n\n");
break; //loop ends when there are no matches
}
i++;
}while(1);
, или просто сделать return
, так как функции больше нечего делать.
EDIT
ОП опубликовал вторую редакцию кода.Этот адрес редактирования второй ревизии.
Одна проблема со второй ревизией состоит в том, что код всегда возвращает n-1
.Это делается даже тогда, когда «код» не найден.Это ошибка.
if(i==(n-1)){
также неверен, так как это означает, что номер элемента n-i
никогда не будет проверен.
Попробуйте что-то вроде этого:
int DeleteItem (int n){
printheader();
int i=0, code, pos;
printf("\nEnter the code of the item you want to delete: ");
scanf("%d", code);
while(i<n){
if(code==item[i].code){
for (pos=i; pos<(n-1); pos++){
item[pos] = item[pos+1];
}
printf("\nItem deleted!");
return n-1; // End the function and return n-1 as an item was deleted
}
i++;
}
printf("\nCode not found!\n\n");
return n; // End the function and return n as no item was deleted
}
Кстати: вы всегда должны проверять значение, возвращаемое scanf