Your problem is in the 3'\r', which brings the cursor back to the beginning of the line, and a new number overwrites the previous one. Well, the number starts at 100, then the 99 overwrites the 1 and zero, leaving the final zero where it was. then the 98 overwrites the 99, still leaving the last zero. When you started the loop with 120, the 119 was able to overwrite the full previous number, until, of course, it reaches 99, then you have the same problem. To rectify it, try changing std::cout << "\r\r\r" << cntr << std::flush; to std::cout << "\r\r\r" << cntr << " " << std::flush;. (Added a space)
Glad it now works. And I like your solution for printing the space. My way would probably mean using 4 '\r''s to counteract the space added. Didn't really check it.