PDA

View Full Version : for loop in c


static
Oct24-09, 07:40 PM
My task is to draw a square on black background using ppm.
What I did is this loop:

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

Why?

Hurkyl
Oct24-09, 07:55 PM
Hrm. Your indentation didn't translate faithfully, but I do notice that the line where you print the newline is somewhat suspicious....

Mark44
Oct24-09, 08:30 PM
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
for (h = 0; h < 480 ; h++)
{
}
and your inner loop should be similarly adjusted
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.

static
Oct24-09, 09:18 PM
thanks Mark44, it works!
I just deleted equation signs from outer and inner loop and beautiful green square appeared.