I don't see another option.
Perhaps something like this. (I don't think that 'we' on the arduino forums recommend functions nearly enough. This is a case where they help, aside from the usual "readability" reasons.)
byte r, g, b;
void setup() {
Serial.begin(38400);
}
void loop() {
if (rgbloop()) {
Serial.println("\n\n *********** End of Loop *********\n");
delay(500);
} else {
Serial.println("\n========= Bailout works ===========");
delay(1000);
}
}
byte rgbloop() {
for (r = 0; r < 10; r++) {
for (g = 10; g != 0; g--) {
for (b = 0; b < 10; b++) {
if (Serial.read() > 0) {
return 0; // Bail out
}
Serial.println("do something");
}
}
}
return 1; // return success
}