Когда у вас возникают проблемы с логикой, лучше просто пройтись по ней и посмотреть, что произойдет. Я не совсем понимаю, что вы пытаетесь сделать в цикле, поэтому давайте пройдемся по нему блок за блоком и представим, что мы используем 1, 2, 5, 7, 9 в качестве входных данных.
while(start_num <= big_num_answer) {
Довольно просто. Цикл while продолжается, пока start_num меньше или равен наибольшему числу. start_num, в данном случае, равно 1.
if(numbers[i] == start_num + 1) {
start_num += 1;
has_been_used = 1;
}
i равно 0, поэтому эта строка переходит в if (1 == 2). Это пропущено.
else if(i >= length && has_been_used == 0)
{
printf("%d", start_num + 1);
}
Это происходит, если (0> = 5 И 0 = 0). Он пропущен и номера не выводятся.
i++;
if (i > length) {
i = 0;
}
Теперь я 1. Давайте снова пройдемся по циклу.
if(numbers[i] == start_num + 1) {
start_num += 1;
has_been_used = 1;
}
Обращается к if (2 == 2). Так что теперь start_num = 2 и has_been_used = 1.
else if(i >= length && has_been_used == 0)
{
printf("%d", start_num + 1);
}
Блок else полностью пропускается, поскольку выполнено другое условие. И этот блок никогда не будет выполнен снова, потому что has_been_used был установлен в 1, и у вас нет кода, который возвращает has_been_used обратно в 0. Поскольку мы пробежали по нему сейчас, мы можем увидеть хотя бы одну причину, по которой код ничего не выводит.