## Why is this an issue?

The counter of a `for` loop should be updated in the loop’s increment clause. The purpose of a `for` loop is to iterate over a range using a counter variable. It should not be used for other purposes, and alternative loops should be used in those cases.

If the counter is not updated, the loop will be infinite with a constant counter variable. If this is intentional, use a `while` or `do` `while` loop instead of a `for` loop.

If the counter variable is updated within the loop’s body, try to move it to the increment clause. If this is impossible due to certain conditions, replace the `for` loop with a `while` or `do` `while` loop.

## How to fix it

### Code examples

#### Noncompliant code example

Move the counter variable update to the loop’s increment clause.

    for (int i = 0; i < 10; ) { // Noncompliant, i not updated in increment clause
      // ...
      i++;
    }

    int sum = 0
    for (int i = 0; i < 10; sum++) { // Noncompliant, i not updated in increment clause
      // ...
      i++;
    }

#### Compliant solution

    for (i = 0; i < 10; i++) { // Compliant
      // ...
    }

    int sum = 0
    for (int i = 0; i < 10; i++) { // Compliant
      // ...
      sum++;
    }

#### Noncompliant code example

If this is impossible and the counter variable must be updated in the loop’s body, use a `while` or `do` `while` loop instead.

    for (int sum = 0; sum < 10) { // Noncompliant, sum not updated in increment clause
      // ...
      if (condition) sum++;
      // ...
    }

#### Compliant solution

    int sum = 0;
    while (sum < 10) { // Compliant
      // ...
      if (condition) sum++;
      // ...
    }