I know C programs with for loops that are correct...
Me too. I also know C programs with for loops that are incorrect. A C-style for loop can do everything an iterator can do, if you're willing to program it to do so. Why do languages support iteration natively instead of making everyone write structural code by hand (or by editor) every time?
Is one of them incorrect?
We both know better.
Improve your skills with Modern Perl: the free book.