Is there any examples on going into a do while loop and then breaking it when another event happens?
First, explain why you want to use a do/while construct. I've been writing C and C++ code for 25 years, and never used one. Plenty of while loops, but no do/while loops.
A while loop keeps executing until some condition is true or until something in the while loop causes a break.
So, yes, you could use a while loop to execute functions over and over, exiting when a new IR event occurred. Simple call irrecv.decode() in the while loop, and break if it returns true.
You could change your loop function, too. Separate the test for, and decoding of, the IR event from the use of the decoded value.
In the cases where you want to do something only once, set results.value to 0. In the other cases, don't change results.value.
Then, each pass through loop, the action triggered by the last IR event will be repeated, unless the event value was changed to 0.