judith@mit-amt.MIT.EDU (Judith Donath) (04/05/86)
K & R, page 56: "The for statement for (expr1; expr2; expr3) statement is equivalent to expr 1; while (expr2) { statement expr3; }" Not always true. K & R, page 62 "The continue statement... causes the next iteration of the enclosing loop (for, while, do) to begin. In the whie and do, this means that the test part is executed immediately; in the for, control passes to the re-initialization step." Thus, a loop like for (i = 0; i < 4; i++) { if (i == 2) { printf("continuing\n"); continue; } else printf("%d\n", i); } terminates, while i = 0; while (i < 4) { if (i == 2) { printf("continuing\n"); continue; } else printf("%d\n"); i++; } loops forever. Is there any reason or use for this difference in behaviour between while and for? Are there any implementations in which a continue in a for loop passes control to the test, as if for was really the equivalent of the above structured while loop?
chris@umcp-cs.UUCP (Chris Torek) (04/06/86)
In article <139@mit-amt.MIT.EDU> judith@mit-amt.MIT.EDU (Judith Donath) [asks yet another `frequently asked' question; perhaps this should be included in the net.announce.newusers section.] >K & R, page 56: > "The for statement > for (expr1; expr2; expr3) > statement > is equivalent to > expr 1; > while (expr2) { > statement > expr3; > }" > >Not always true. Correct. >K & R, page 62 > "The continue statement... causes the next iteration of the > enclosing loop (for, while, do) to begin. ..." Note that this is in the `tutorial' part of the book, and that page 62 comes after page 56. >Is there any reason or use for this difference in behaviour between >while and for? This is the way most people believe they should behave. >Are there any implementations in which a continue in a for loop >passes control to the test [...] ? If so, those implementations are incorrect. -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 1415) UUCP: seismo!umcp-cs!chris CSNet: chris@umcp-cs ARPA: chris@mimsy.umd.edu
greg@utcsri.UUCP (Gregory Smith) (04/07/86)
In article <139@mit-amt.MIT.EDU> judith@mit-amt.MIT.EDU (Judith Donath) writes: [example deleted. I have substituted this from K&R pg. 203] while(...){ for(...){ ... ... contin:; contin:; } } [ Judith pointed out that 'continue' does the re-initialization step on the for loop ] > >Is there any reason or use for this difference in behaviour between >while and for? Definitely. The re-initialization step is intended to be part of the loop control. 'continue' is intended to mean 'abandon this execution of the loop and go on to the next'. Thus you would want the re-initialization step done, so the loop control will work properly. E.g.: execute loop for i==1 to 10, but not for i == skip: for(i=1; i<=10; ++i ){ if( i==skip) continue; ... } If ++i was not done after continue, an infinite loop would result. >Are there any implementations in which a continue >in a for loop passes control to the test, as if for was really >the equivalent of the above structured while loop? If there are, they are incorrect, and they are in trouble. -- "If you aren't making any mistakes, you aren't doing anything". ---------------------------------------------------------------------- Greg Smith University of Toronto UUCP: ..utzoo!utcsri!greg