1. ## Confused

I just bought "Accelerated C++ -Practical programming by example"

It seems like a great book... but i'm really confused about something:

On page 21 (for those of you that have the book)

They explain how a "while loop" works (which btw. i already know) but they seem to have said something really weird. Here is the code in the book:

Code:
```//  invariant: we have written r rows so far

int r = 0;
//  setting r to 0 makes the invariant true

while (r != rows) {
//  we can assume that the invariant is true here

//  writing a row of output makes the invariant false
std::cout <<  std::endl;

//  incrementing r makes the invariant true again
++r;
}

//  we can conclude that the invariant is true here```
Now I'm really confused; as I understand it when they refer to "the invariant" they are reffering to r not equalling rows, they previously declared rows to be an integer equal to 5 (on page 18):

Code:
```       //  the number of blanks surrounding the greeting

//  total number of rows to write
const int rows = pad * 2 + 3;```
So my question is why is the invariant made false by outputting a newline?? Surely its not, surely if i didn't include the "++r;" rather than the while loop stopping as seem's to be implied it would go on for ever......... what am I missing?

EDIT: I get it, i was misunderstanding what they meant by invariant.... still fail to see its uses, loops seem pretty easy to understand without these invariant things.

2. Originally Posted by Clyde
I just bought "Accelerated C++ -Practical programming by example"

It seems like a great book... but i'm really confused about something:

On page 21 (for those of you that have the book)

They explain how a "while loop" works (which btw. i already know) but they seem to have said something really weird. Here is the code in the book:

Code:
```//  invariant: we have written r rows so far

int r = 0;
//  setting r to 0 makes the invariant true

while (r != rows) {
//  we can assume that the invariant is true here

//  writing a row of output makes the invariant false
std::cout <<  std::endl;

//  incrementing r makes the invariant true again
++r;
}

//  we can conclude that the invariant is true here```
Now I'm really confused; as I understand it when they refer to "the invariant" they are reffering to r not equalling rows, they previously declared rows to be an integer equal to 5 (on page 18):

Code:
```       //  the number of blanks surrounding the greeting