«Возврат» (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
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
- Печать string and integer LCD
- устаревшее преобразование из строковой константы в 'char*'
По этим крошечным фрагментам невозможно сказать ничего конкретного. Нам нужно как минимум увидеть структуру всего кода., @Majenko
Ну, я не могу опубликовать свой код. Он всё равно 800 строк, так что сомневаюсь, что кто-то захочет его разбирать. Не знаю, как лучше объяснить ситуацию. Вопрос скорее в том, как должна работать функция возврата., @LegitimateWorkUser
По крайней мере покажите нам, как и где эти функции вызываются., @Majenko
Функция return делает то, что заявлено. Проблема не в функции return, а в том, как вы её используете, или в остальной структуре вашего кода., @Majenko
Не здесь! В вашем вопросе!, @Majenko
Хорошо, я попробую с псевдокодом в обновлении., @LegitimateWorkUser
На первый взгляд, эта структура выглядит нормально. Вы уверены, что плата не зависает и не сбрасывается? Может быть, из-за нехватки памяти?, @Majenko