Void loop inside a switch case?

here is an example of the code with a button library and leveraging arrays to group functions that could be used in a state machine (Here is a small introduction to the topic if needed Yet another Finite State Machine introduction)

when you select a sequence an init function is called upon switching, then the loop continuously call the sequence function and when you switch again, and end function is called before calling the new init function.

click to see the code
#include <LiquidCrystal.h>
#include <Toggle.h>

const byte buttonPin = 8;    // the number of the pushbutton pin
Toggle selectButton;
LiquidCrystal lcd( 7,  6,  5, 4, 3, 2);

const byte sequenceCount = 6;
byte currentSequence = 0;

// prototypes to declare the arrays
void initSequence0();
void initSequence1();
void initSequence2();
void initSequence3();
void initSequence4();
void initSequence5();

void Sequence0();
void Sequence1();
void Sequence2();
void Sequence3();
void Sequence4();
void Sequence5();

void endSequence0();
void endSequence1();
void endSequence2();
void endSequence3();
void endSequence4();
void endSequence5();

// arrays of functions pointers
void (*initSequence[])() = {initSequence0, initSequence1, initSequence2, initSequence3, initSequence4, initSequence5};
void (*sequence[])() = {Sequence0, Sequence1, Sequence2, Sequence3, Sequence4, Sequence5};
void (*endSequence[])() = {endSequence0, endSequence1, endSequence2, endSequence3, endSequence4, endSequence5};

// some heartbeat for the current sequence
void heartbeat() {
  static unsigned long chrono = 0;
  if (millis() - chrono >= 5000) {
    chrono = millis();
    Serial.print("In sequence #");Serial.println(currentSequence+1);
  }
}


// Implementation of the functions for the sequences

void initSequence0() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence1() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence2() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence3() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence4() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence5() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}

void Sequence0() {heartbeat();}
void Sequence1() {heartbeat();}
void Sequence2() {heartbeat();}
void Sequence3() {heartbeat();}
void Sequence4() {heartbeat();}
void Sequence5() {heartbeat();}

void endSequence0() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence1() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence2() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence3() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence4() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence5() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}


void displayCurrentSequence() {
  lcd.clear();
  lcd.print("Sequence ");
  lcd.print(currentSequence + 1);
  lcd.setCursor(0, 1);
  lcd.print("Count to ");
  lcd.print(currentSequence + 4);
}

void handleSelectButton() {
  selectButton.poll();
  if (selectButton.onPress()) {
    endSequence[currentSequence]();
    currentSequence = (currentSequence + 1) % sequenceCount;
    displayCurrentSequence();
    initSequence[currentSequence]();
  }
}

void setup() {
  selectButton.begin(buttonPin);
  Serial.begin(115200);
  lcd.begin(16, 2);
  lcd.print("-- SEQUENCING --");
  delay(1000);
  displayCurrentSequence();
  initSequence[currentSequence]();
}

void loop() {
  handleSelectButton();         // are we switching sequence ?
  sequence[currentSequence]();  // call in a loop the function for the sepcific sequence
}