# For loop in c

My task is to draw a square on black background using ppm.
What I did is this loop:
Code:
	for (int h=0; h<=480; h++){
for (int w=0; w<=640; w++){

if (h>100 && h<380 && w<460){
//green paint
fprintf (fp, "%s", greenColor);
fprintf (fp, "%s", space);
} else {
//paint in black
fprintf (fp, "%s", blackColor);
fprintf (fp, "%s", space);
fprintf (fp, "%s", "\n");
}

}

}
but instead of getting a square I get sth like this:
http://www.polew.pl/file/wastage/test.gif [Broken]

Why?

Last edited by a moderator:

Related Programming and Computer Science News on Phys.org
Hurkyl
Staff Emeritus
Gold Member
Hrm. Your indentation didn't translate faithfully, but I do notice that the line where you print the newline is somewhat suspicious....

Mark44
Mentor
How are your strings greenColor, blackColor, and space defined? It looks to me like some of your lines are too long and are wrapping to the next screen line.

I'm assuming that you are drawing lines from the top of the screen down, and that the upper left corner of the screen is (0, 0) and the lower right corner is (639, 479). This means that both your loops are running one iteration too many. The outer loop should be
Code:
for (h = 0; h < 480 ; h++)
{
}
Code:
for (w = 0; h < 640 ; h++)
{
}
My outer loop runs 480 times; yours runs 481 times. My inner loop runs 640 times for each iteration of the outer loop; your runs 641 times for each iteration of the outer loop.

Those points aside, your code puzzles me. I would think you would want to draw some solid black lines for 100 screen lines, and then draw lines that are black for the first 100 pixels, then green for 280 pixels, then black again for the remainder of each line for lines 101 through 379. I don't see your code doing the first black part on each line that the rectangle is in.

After that, you want to draw all black lines for the remaining screen lines.

thanks Mark44, it works!
I just deleted equation signs from outer and inner loop and beautiful green square appeared.