Is it a bug in compiler or error in code?

i was solving one of practise problem and i encountered this . the if statement is executed even if the condition is false while the else statement part is not being executed .

here’s the part of code

	while(N[i]!=1)
	{
		for(j=0;j<N[i];j+=2)
		{
			   if(N[i]%2==0)         //this code is executed even if N is odd 
			   {
			   	
			   	    for(k=0;k<(N[i]/2);++k)
			   	    {
			   	    	F[k]=D[j];
			   	    	D[k]=F[k];
			   	    	
					   }
					cout<<" 1";
					N[i]=k;
					
			   	
			   	
			   }
			   
			   
			   else                               //this else part is not executed even after if condition is not true
			   {
			   	  cout<<" 2";
				  if(N[i]==1)
			   	  {
			   	  	break;
				  }
				else
				{  cout<<" 3";
				    for(k=0;k<((N[i]+1)/2);++k)
					  {
					 	F[k]=D[j];
			   	        D[k]=F[k];
			   	    	
						 }
						   cout<<" 4";
						   N[i]=k;
					 }
			   }
			
			
			
		}
	}

I can’t determine everything without full code, please write full code or try debugging yourself (if you use Dev C++, it’s much easier)

the problem is inside this loop so i did’t posted whole code. the else statement is not being executed

for(j=0;j<N[i];j+2)

i have chaged that to j+=2; but still else part is not being executed

Hi, pkpawan123

It’s definitely not a compiler bug.

I checked your code with a bunch of scenarios, and this line is always executing properly…

			   if(N[i]%2==0)

That is, if N[i] is even at the time, it executes the “if” portion. Otherwise, it executes the “else” portion.

Of course, the value of N[i] changes over time. For example if it starts at 5, then the cout statements will output: 2 3 4 2 3 4 1.

That’s because N[i] is initially 5, which is odd, so the ‘else’ section executes (resulting in an output of 2 3 4), which eventually changes N[i] to 3.

Then the j-based for loop repeats: j is now 2, so the loop continues, and the ‘else’ section is executed again (so you see another 2 3 4), resulting in N[i] being changed to 2.

Then the j-based for loop repeats again. j is now 4, so the for loop ends, since 4 > N[i]. Then outer while loop executes again: N[i] is still !=1, so while loop continues.

Then the j-based for loop restarts (j is back to 0), and the “if” statement is true (since 2 %2==0) – this results in cout outputting the final 1. That “if” code also results in N[i] being changed to 1.

Then, one final time, the j-based for loop repeats: j is now 2, so the for loop ends. Then the outer while loop kicks in: N[i] is now 1, so it ends.

So, bottom line, the code is working correctly from a compiler point of view. But perhaps it’s not working as you logically intend it to. Good luck!

4 Likes

here j should be 3 i think and it will satisfy j<N[i] so it must do run correctly

j+=2, so j starting from 0 would be 2 next and then 4 and so on…

1 Like

got it thanks. now i will fix it.