9B. Standards for For-Loops

Only omit parts of the heading with good reason

Consider this loop.
  int k = 0;
  for(; k < n; k++)
  {
    ...
  }
A for-loop heading is intended to contain all of the code to control one of the variables. By moving the initialization of k out of the for-loop heading, you make the program a little more difficult to read. Instead, write
  int k;
  for(k = 0; k < n; k++)
  {
    ...
  }
The standards require you to do that when sensible.

Control one variable in a for-loop heading.

A for-loop is convenient for computing powers. Here is a sensible power function.
  // power(x,n) returns x to the n-th power.
  //
  // Requirement: n > 0.

  double power(double x, int n)
  {
    double p = x;
    for(int k = 2; k <= n; k++)
    {
      p = p * x;
    }
    return p;
  }
There are two loop-control variables, k and p. Notice that all of the code to initialize, update and test k is in the for-loop heading, as it should be. That makes the loop easy to understand: it says to do statement p = p*x for each value of k from 2 to n. What about the following version?
  // power(x,n) returns x to the n-th power.
  //
  // Requirement: n > 0.

  double power(double x, int n)
  {
    double p = x;
    for(int k = 2; k <= n; p = p * x)
    {
      k++;
    }
    return p;
  }
That works, but it is much more difficult to understand than the previous version. To make your code easier to understand, concentrate on one main control variable in a for-loop heading. The standards require you to do that.

Do not change the value of a for-loop control variable in the loop body.

A for-loop control variable (any variable that is modified in the third part of a for-loop heading) should only be modified in the for-loop heading, not in the body of the loop. For example, do not write
  for(i = 1; i < n; i++) 
  {
    ...
    i = n;
    ...
  }
If you want to break out of a loop, use break or return.

Do not change a for-loop end value in the loop without justification.

Do not change the end-value of a for-loop just as a way to get out of the loop. For example,
  for(i = 1; i < n; i++) 
  {
    ...
    if(condition)
    {
      n = 0;
    }
    ...
  }
is not a good way to cause the loop to end. If you want to exit a for-loop, use break or return.

See the standards for loops for more detail.