while
and break
statements and the fact that the number 1 is considered true
in conditional expressions, we can create a mid-test look in this way:
while( 1 ) { Block 1 if( condition ) break ; Block 2 }
This may not seem quite what you were expecting.
After all we haven't seen the break
used with a loop,
only with the switch
.
A break
in a loop works much like it does in a
switch
, it jumps out of the statement.
Here the break will jump to the closing brace for the
while
where we'll pick up the flow of control with the
statement that follows that brace.
There's another important thing to notice about this loop. Here the condition does not tell under what circumstances to continue, but instead it tell us when to leave the loop. That's a bit different from the other loops.
do-while
statement earlier.
There we asked the user to input a number and repeated if they
did it out of range.
However, we didn't print out an error message if it was and we repeated.
We can do so most naturally with a mid-test loop:
while( 1 ) { printf( "Enter a number: " ) ; scanf( "%d", &x ) ; if( x >= 0 && x <= 100 ) break ; printf( "The number should be between 0 and 100 (inclusive).\n" ) ; }
while
,
do-while
or for
statements (without the
break
), we'd find that we either had to introduce extra
variables or repeat some of the code.
Usually the simpler solutions are preferable since they are (hopefully)
less error-prone.
You probably won't see or use mid-test loops as often as while
and for
loops.
Personally, however, I have found that increasingly I am recognizing
programming structures as mid-test loops and implementing them like
this.
It is becoming a very useful abstraction.
x
and y
equal after this code is executed?
x = 3 ; while( 1 ) { y = 2 * x ; if( y > x + 4 ) break ; x++ ; }