tkokane
tkokane

Reputation: 11

Exiting loop without break/return/if

If you have a for loop:

for(i=0;i<10;i++){} 

Now, when i==5, how can I exit the for loop completely without using break, return, or if?

Upvotes: 1

Views: 1069

Answers (7)

w.b
w.b

Reputation: 11228

This works using while and goto:

for (int i = 0; i < 10; i++)
{
    while (i < 5)
    {
        Console.Write(i + " ");
        goto OutsideWhile;
    }
  OutsideWhile:
        continue; 
}
// 0 1 2 3 4

Upvotes: 0

Harald Coppoolse
Harald Coppoolse

Reputation: 30454

The real answer of course would be the following:

for (i=0; i!=5; i++)
{
   // do something
}

But let's make it a bit more generic: stop if (expression) becomes true.

The second argument of the for loop is a boolean expression which determines whether to continue the loop with the next element or not.

So if you want to stop looping because of any condition:

for (i=0; !(expression) && i<10; i++)
{
    // do something
}

Upvotes: 0

Kryptonian
Kryptonian

Reputation: 870

The question says that loop should end when i=5, It says nothing about start, So this should be valid (ternary operator solution is better, but if we are not allowed to use any conditional operator)

for (int i = 0; i < 10; i++)
    {           
        i=i-4;
        Console.WriteLine("i = " + i.ToString());
        i=i+4;
    }

this Starts at -4 and ends at 5.

Upvotes: 0

manish
manish

Reputation: 1458

well here's another way if you want to break the processing exactly when i = 5 without using break, return, or if

for (int lowsetLimit = 0, highestLimit = 10, i = lowsetLimit; i < highestLimit; i++)
{
   //normal code which process before i gets eqaul to 5 goes here...

   i = (i < 5) ? i : highestLimit; //and here is the pivot point.
}

Upvotes: 1

GazTheDestroyer
GazTheDestroyer

Reputation: 21241

for (int n = 0; n < 10; n++)
{
    n += (n / 5) * 5;
}

Upvotes: 1

Mike Gledhill
Mike Gledhill

Reputation: 29161

The best I could come up with was this:

for (int i = 0; i < 10; i++) 
{
    i = (i == 5) ? 10 : i;

    Trace.WriteLine("i = " + i.ToString());
}

...which will cause the loop to run six times (i=0..5) and display this..

i = 0
i = 1
i = 2
i = 3
i = 4
i = 10

The alternative way to "exit the loop" (in a particularly nasty fashion) would be to do this...

for (int i = 0; i < 10; i++) 
{
    int a = 3 / ((i == 5) ? 0 : 1);

    Trace.WriteLine("i = " + i.ToString());
}

..which crashes out, errr, successfully exits the loop without using the break, return or if commands.

i = 0
i = 1
i = 2
i = 3
i = 4
A first chance exception of type 'System.DivideByZeroException' occurred in MikesProgram.dll

language is C# .it was an interview question actually..curious

Do I get the job ?

I would need to check your health & dental plans, and I have to leave early on Thursdays to collect my daughters from school.

;-)

Upvotes: 3

rptwsthi
rptwsthi

Reputation: 10172

for(i=0;i<10;i++){
 (i==5) ? goto Outer : //do something;
}
Outer:
//do something

Upvotes: 0

Related Questions