#c #sorting #struct
#c #сортировка #структура
Вопрос:
void sortAlphabetically(int listLength, contactInfo* arrayOfStructs)
{
contactType temp;
for (int i = 0; i < listLength; i )
{
if (strcmp(arrayOfStructs[i].contactName, arrayOfStructs[i 1].contactName) > 0)
{
temp = arrayOfStructs[i]; //swapping entire struct
arrayOfStructs[i] = arrayOfStructs[i 1];
arrayOfStructs[i 1] = temp;
}
}
}
Комментарии:
1. С какой именно ошибкой происходит сбой вашей программы?
2. Вопрос получше: почему вы делаете это вместо использования
std::sort
?3. @maxpm program.exe перестал работать
Ответ №1:
Следующее выражение недопустимо, когда i == (listLength-1)
(предполагая, что listLength
это количество элементов в arrayOfStructs
):
arrayOfStructs[i 1]
Ответ №2:
Вы должны выполнить итерацию только до listLength - 1
или проверить, что вы не дошли до последнего элемента, прежде чем ссылаться arrayOfStructs[i 1]
.
Ответ №3:
Похоже, что вы индексируете вне границы массива:
arrayOfStructs[i 1]
Я предполагаю, что listLength
это длина списка, означающая, что это на единицу больше, чем последний элемент списка. Ваше условие for i < listLength
удерживает i в пределах границ, но не i 1.
Это может привести, а может и нет, к сбою.
Ответ №4:
Я полагаю, это из-за следующих строк:
arrayOfStructs[i] = arrayOfStructs[i 1];
arrayOfStructs[i 1] = temp;
Более конкретно, i 1
часть. Если ваш for
цикл выполняется от нуля до listLength - 1
, на последней итерации вы попытаетесь получить доступ к одному элементу за пределами фактического диапазона.
Вы можете использовать i < listLength - 1
для устранения проблемы или просто использовать if
инструкцию внутри цикла. Изменение условия, вероятно, является лучшей практикой.