Мой ответ не полный, но я нашел основную проблему в коде.
# Remove negative items
for (int i = 0; i < n; i++)
{
if (Stalls[i].net < 0)
{
printf(" i = %d, %d\n", i, Stalls[i].net);
for (int j = i + 1; j < n; ++j)
{
// strcpy(Stalls[j - 1].name, Stalls[j].name);
// Stalls[j - 1].net = Stalls[j].net;
Stalls[j - 1] = Stalls[j];
}
n--;
}
}
Эта функция имеет проблемы
Если data
равно [-3, -2, -1, 0, 1, 2]
После вышеупомянутого for
цикла data
равно [-2, 0, 1, 2, 2, 2]
Но мы можем думать, что data
это [0, 1, 2, 2, 2, 2]
Почему:
-3 -2 -1 0 1 2
Индекс -3
равен 0,
С Stalls[j - 1] = Stalls[j];
, -3
заменить на -2
,
и -2
переместитесь в 0-ю позицию,
Но -2
не может проверить с помощью if (Stalls[i].net < 0)
, потому что i
уже увеличено
Итак, -2
остается
Легко ответить: (Не оптимизировано)
// Remove negative items
for (int k = 0; k < n; k++) // This is added loop
for (int i = 0; i < n; i++)
{
if (Stalls[i].net < 0)
{
printf(" i = %d, %d\n", i, Stalls[i].net);
for (int j = i + 1; j < n; ++j)
{
// strcpy(Stalls[j - 1].name, Stalls[j].name);
// Stalls[j - 1].net = Stalls[j].net;
Stalls[j - 1] = Stalls[j];
}
n--;
}
}