Ваш код:
int i = -1;
do
{
...
i++;
ct = count[i += 1];
...
} while (i < donations);
Вы на самом деле увеличиваете i в два раза , затем получаете значения из счетчика [i], присваивающего ct переменную
См. Этот пример:
int[] count = new int[3];
count[0] = 0;
count[1] = 1;
count[2] = 2;
int i = -1;
do
{
i++;
int x = count[i += 1];
Console.WriteLine(x);
} while (i < 3);
Это вызовет IndexOutOfRangeException
Объясните:
Первый цикл:
i++; // i increased 1, so i = 0
int x = count[i += 1]; // i increased 1, so i = 1, then get count[1] assign to x, x is 1
Второй цикл:
i++; // i increased 1, so i = 2
int x = count[i += 1]; // i increased 1, so i = 3, then get count[3] assign to x
count [3] причина IndexOutOfRangeException
Что-то вроде count [i + = 1] сделает вашкод сложнее поддерживать, на мой взгляд, вам следует избегать его, если это возможно, попробуйте написать его подробно, как можете