I think you're mixing up two things. When exactly to print another character is probably fairly specific to your particular problem. Assume the screen is 80 characters wide, or use
curses or the $COLUMNS environment variable to figure out how wide the user's screen is. Then however you want to calculate the % completion, divide 100% by 80 (or whatever other value you came up with) and print another character when another 1/80 has been completed.
A fairly traditional "pretty" progress bar would use the fact that carriage return will return the cursor to column 1 without advancing to a new line (newline does that). So you can create an illusion of a growing bar by printing "=>\r" then "==>\r" then "===>\r" and so forth. I believe the progress bar
example I presented a couple of weeks ago demonstrated this (albeit with numbers instead of ASCII graphics).