First off, I recommend that you work your way towards writing things in a less procedural way--as a general rule it doesn't pay to use things Like For, Do, or While in Mathematica. Also, outputting your results should not be done via a Print statement--best to reserve Print as a debugging tool at best.
That said, the reason why you weren't able to separate your Dynamic InputFields from one another is that Dynamic has the Attribute HoldAll. In essence this means that, in your code, each of your Dynamic has a raw [Rho][i] inside of it--without the i having been assigned a value.
Here is an approach, based on your original code that achieves your original intent (there may well be better ways to do this) and which uses Mathematica sorts of functions rather than a For:
Grid@Table[{"\[Rho][" <> ToString[i] <> "]", InputField[Dynamic[#]] &[\[Rho][i]]}, {i, 0, 4}]
The trick here to get the [Rho][i] inside of the Dynamic was to use a pure function to get it evaluated (and hence the i getting a value at each step) outside of the Dynamic before being inserted into the place where you want it.
Be careful of this approach though. If [Rho] is a function with a definition, then [Rho][i] will evaluate to whatever value it evaluates to before getting into the Dynamic. So perhaps it is best to execute
ClearAll[\[Rho]]
before evaluating the above code.
There are a few Mathematica coding lessons in this explanation which will help you learn some useful things if you read up on them.
I hope this helps....