Если уж очень хочется без goto, то первое, что приходит на ум - использование дополнительной функции, в которой будет происходить обработка цикла. То бишь, как-то так:
Соответственно, можно под каждое условие выхода из цикла возвращать своё значение и уже от этого значения плясать в первоначальном коде.
Ну а обычные числа возвращать по ссылке (уточнение для тех, кто сам не догадается )