«Возврат» (return) не работает для выхода из цикла

Я в этом деле новичок и не смог найти ответов после многократного поиска.

У меня есть функция Startscreen(), которую я запускаю во время настройки, и внутри неё я использую различные циклы while и условные операторы if/else. Эта функция запускает начальный экран моей программы на сенсорном экране.

Что ж, когда внутри switch-case, внутри цикла while, выполняются определенные условия, я хочу загрузить свой главный экран, а затем немедленно остановить всю функцию Startscreen(), вот так:

LoadMainScreen();
return;

Однако в итоге я вижу, как загружается мой главный экран, а затем моя функция Startscreen() продолжает выполняться!

Похоже, «return» работает не так, как заявлено. Если бы я хотел разорвать текущий цикл, я бы использовал «break», верно?

Итак, мой вопрос: имеет ли значение, что я использую return внутри цикла while, внутри оператора switch? Как мне полностью выйти из всей функции верхнего уровня?

Я уже пробовал выйти из функции и перейти сразу к основному циклу следующим образом:

LoadMeasScrn();
loop();
return;

И происходит то же самое. Вот небольшой псевдокод, который, надеюсь, покажет, как я всё организовал:

void setup(){
Startscreen();  //этот экран предоставляет пользователю параметры
}

void loop(){
do all the other main functions of the program;
}

void Startscreen(){

if this thing, show this
if that thing, show that
take readings
switch(reading){
case(number):
    while(1){
        check for button presses
        if (this){
             if (that){
                    LoadMainScreen();
                     return;         // это должно полностью завершить функцию стартового экрана и позволить программе перейти к основному циклу
case(other number);
    do other stuff
    break;
 } //конец дела
Do other stuff that the startscreen program may need to do  // это то, что я вижу после вызова return. Не должно происходить

, 👍0

Обсуждение

По этим крошечным фрагментам невозможно сказать ничего конкретного. Нам нужно как минимум увидеть структуру всего кода., @Majenko

Ну, я не могу опубликовать свой код. Он всё равно 800 строк, так что сомневаюсь, что кто-то захочет его разбирать. Не знаю, как лучше объяснить ситуацию. Вопрос скорее в том, как должна работать функция возврата., @LegitimateWorkUser

По крайней мере покажите нам, как и где эти функции вызываются., @Majenko

Функция return делает то, что заявлено. Проблема не в функции return, а в том, как вы её используете, или в остальной структуре вашего кода., @Majenko

Не здесь! В вашем вопросе!, @Majenko

Хорошо, я попробую с псевдокодом в обновлении., @LegitimateWorkUser

На первый взгляд, эта структура выглядит нормально. Вы уверены, что плата не зависает и не сбрасывается? Может быть, из-за нехватки памяти?, @Majenko