When you break the rules, the C environment is not constrained. This is just like the contract model of specifications we've discussed more recently: If the rules are violated, it's ok to violate the postcondition; and this gains us the MEANING of the rules. The fact that that program is allowed to print anything means that the C compiler doesn't have to generate extra machine code to initialize all uninitialized variables to zero, or whatever the requirement might be. Use of the 'age' variable without initializing it is invalid. Normally we should be very careful not to do this. In the case of this program, we could be careful to avoid using an uninitialized variable 'age' by testing the scanf result, which we do in question 4.