Jump to content

  • Log In with Google      Sign In   
  • Create Account

for loop skipping to the end after first loop


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
7 replies to this topic

#1 Killerko   Members   -  Reputation: 190

Like
1Likes
Like

Posted 14 June 2014 - 06:04 PM

 Hi,

I have strange problem with a standard for loop..

It should go from -2, to 2 (-2, -1, 0, 1, 2) but when I debug the program and place the red dot inside the loop and look at the "i" value it goes from -2 directly to 2 after first loop. (-2, 2) which is puzzling me why? 

 

here is the loop:

 
for(int i = -2; i < 3; i++)
{
    if(myMap[(y-2) * myMapW + x+i].properties != 0 && myMap[(y-1) * myMapW + x+i].properties != 1)
    {
        tileTemp.sprite = 1;//if(getTileSprite(x+i, y-2) > 2) tileTemp.sprite = rand()%2 + 1;
	tileTemp.entity = this->getTileEntity(x+i, y-2);
	tileTemp.properties = 2;
	myMap[(y-2) * myMapW + x+i] = tileTemp;
    }
}


I tried to change the negative numbers so the loop should go from 0, 1, 2, 3 and 4 but it goes from 0 to 4 right after first loop... why? 

for(int i = 0; i < 5; i++)
{
    if(myMap[(y-2) * myMapW + x+i-2].properties != 0 && myMap[(y-1) * myMapW + x+i-2].properties != 1)
    {
        tileTemp.sprite = 1;//if(getTileSprite(x+i-2, y-2) > 2) tileTemp.sprite = rand()%2 + 1;
        tileTemp.entity = this->getTileEntity(x+i-2, y-2);
        tileTemp.properties = 2;
        myMap[(y-2) * myMapW + x+i-2] = tileTemp;
    }
}

I use visual studio 2010 and for loop so far have worked as it should.. well, until now


Edited by Killerko, 14 June 2014 - 06:05 PM.


Sponsor:

#2 phil_t   Crossbones+   -  Reputation: 4093

Like
9Likes
Like

Posted 14 June 2014 - 06:22 PM

Where in the loop did you put the breakpoint? Maybe your if statement only holds true for i =0 or i = 4 (or -2, 2).



#3 SeanMiddleditch   Members   -  Reputation: 7157

Like
6Likes
Like

Posted 14 June 2014 - 06:31 PM

Learn more about your debugger. A breakpoint ("the red dot") is just one tool. You can also Step the code, letting you follow along a loop and inspect the value of a variable at every line. There's also the ability to set data breakpoints allowing you to detect when a variable changes no matter which line of code actually does it. And plenty more.

phil_t is probably right, though. Your code looks fine and that seems a reasonable explanation for the behavior you're seeing. The other possibility is that you are misusing one of your arrays (either you made it too small or your indexing calculations are wrong) and you're clobbering stack variables (like `i`) when you try to write to the array. The data breakpoint feature will help find those cases (if `i` changes when you try to write to an array, something is wrong with the array or your use of it).

#4 Killerko   Members   -  Reputation: 190

Like
0Likes
Like

Posted 14 June 2014 - 06:31 PM

yes thats it.. thanks phil_t! there is a mistake in the second part of the if statement..

"myMap[(y-1)" should be "myMap[(y-2)" and thats exactly why it turned false for 1-3 (-1,1)  ..

 

thanks! :)



#5 Killerko   Members   -  Reputation: 190

Like
0Likes
Like

Posted 14 June 2014 - 06:40 PM

SeanMiddleditch: I'm pretty new to this and still learning mostly.. all I can do while debuging is to place these breakpoints and when the program stops I can examine my variables and they values.. then let the program continue and wait for another stop to examine values again.

How do you use those data breakpoints? that sound like something that could be very useful. 



#6 Lactose!   GDNet+   -  Reputation: 3817

Like
8Likes
Like

Posted 14 June 2014 - 07:05 PM

I'm not sure what application you're using to run/debug this in, but I think the following is true for most major IDEs.

 

A breakpoint will stop the application at the indicated line. From here, you can look at various variables, resume the application, or step through the code.

For stepping through code, you mainly have 2 things -- step over and step into. Step over will continue to the next line in the code, while step into will take you deeper into the code if possible. Basically, on the following line:

int x = getPositionFromCharacter(myCharacter); //Breakpoint here
int y = 15;

Step over will go to the "int y" line, while step into will go into the first line of the "getPositionFromCharacter" function. After stepping through the entire function (or using step out), you'll exit the function and be back where you entered (in this case, the "int x" line).

 

Common keyboard shortcuts for these are:

F9: Set breakpoint at currently selected line.

F10: Step over.

F11: Step into.

Shift+F11: Step out.

 

You can also have conditionals for breakpoints, the two I use the most being:

- Only break if the value is a specific thing or if the value changes (conditional breakpoint), 

- Only break on certain hits, e.g. after 2 hits, or ever 6 hits, etc.

In Visual Studio, you can right click on the breakpoint spot to set various types of breakpoints.

 

In addition, you can also assign variables to a watch list. This allows you to keep track of what the variable is easily. For example, you could add a specific array position (array + index) to watch, and be able to quickly see if it changes in a separate listing (basically saving you having to track it down every time you want to see its value).

 

Hope that helps :)



#7 Killerko   Members   -  Reputation: 190

Like
3Likes
Like

Posted 14 June 2014 - 07:48 PM

Thank you Lactose, all this is very helpful indeed!

 

I've seen those step over and step into icons on the debugging toolbar in my visual studio but had no idea how to use them so I've never used them before.



#8 SeanMiddleditch   Members   -  Reputation: 7157

Like
3Likes
Like

Posted 15 June 2014 - 01:41 AM

http://digital.cs.usu.edu/~allanv/cs2420/debugger_intro.pdf




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS