Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

For loop in c

  1. Oct 24, 2009 #1
    My task is to draw a square on black background using ppm.
    What I did is this loop:
    Code (Text):

        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]

    Last edited by a moderator: May 4, 2017
  2. jcsd
  3. Oct 24, 2009 #2


    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    Hrm. Your indentation didn't translate faithfully, but I do notice that the line where you print the newline is somewhat suspicious....
  4. Oct 24, 2009 #3


    Staff: 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 (Text):
    for (h = 0; h < 480 ; h++)
    and your inner loop should be similarly adjusted
    Code (Text):
    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.
  5. Oct 24, 2009 #4
    thanks Mark44, it works!
    I just deleted equation signs from outer and inner loop and beautiful green square appeared.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook