Programming logic

enter site During my tests with here Flex2 I encountered a strange behavior with the “for” statement and I first thought about a bug of the player.
This simple script was crashing the player (it enters in an infinite loop):

see url
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
private function test():void
{
for(var a:uint = 10; a >= 0; a--)
{
trace(a);
}
}

Once I changed the type of the “a” variable into a “Number” and an “int” I understand what I was missing…
The script worked well after the type change. But to be sure I did also a little test in C which gave me the same results as the flex2 one (infinite loop):

follow link
1
2
3
4
5
6
7
8
9
10
int main(int argc, char *argv[])
{
unsigned int a;
for(a = 10; a >= 0; a--)
{
printf("a = %d\n", a);
}
system("PAUSE");
return 0;
}

Yes, it’s absolutely logical!
After the last step, when a is 0, the program loses next value because it cannot be a negative value and then the loop continues to cicle.

source site Ok, it’s not a player bug… it’s me 🙁

  • Hi Alessandro 🙂
    #include
    #include
    int main(int argc, char *argv[])
    {
    unsigned int a;
    for(a = 10; a > 0; a–)
    {
    printf(“a = %d\n”, a);
    if(a == 1)
    printf(“a = %d\n”, –a);
    }
    system(“PAUSE”);
    return 0;
    }

  • jak

    follow offcourse it’s pretty normal:
    the a– is allowed to go trough 0 and below, cause the for’s stop condition is set to >=0, so when a, values axactly 0, it stills going down on, decrementing a, and thus as it’s an UNSIGNED int variable type, it CANNOT go below 0, and might crash with a number like 65535 or a more crappy processor fault.
    Hope this helps.