The continue statement is for skipping the iteration but it doesn’t work as I expect. Here is my code:
int i = 0;
do
{
if(i== 10)continue;
printf("\n This is = %d",i);
i++;
} while (i<20);
My understanding is that it will skip just
This is = 10
and rest it will print but it is skipping since
This is = 9 till 19
And here is the output
This is = 0
This is = 1
This is = 2
This is = 3
This is = 4
This is = 5
This is = 6
This is = 7
This is = 8
why?
Also when I added for loop ahead of this loop that is entirely getting ignored and not getting executed?
int i = 0;
do
{
if(i== 10)continue;
printf("\n This is = %d",i);
i++;
} while (i<20);
for(int a = 0 ; a<20 ; a++)
{
if(a==10)continue;
printf("\nHere = %d",a);
}
Output :
This is = 0
This is = 1
This is = 2
This is = 3
This is = 4
This is = 5
This is = 6
This is = 7
This is = 8
Why? Please explain.
There are a couple of things going on here. First, The
printfformat string begins with a newline, but doesn't end with one. That's backwards from what is usually done. But because each printed string doesn't end in a newline, it is most likely being buffered until the next newline. So in fact, it's printing" This is = 9", but it isn't actually going through until the next newline, which never comes.The reason the next newline never comes is because, once
iis10, it goes into an infinite loop. Each time through, it does the comparisoni == 10, which is true, so it immediately continues the loop, never executing thei++;increment. In the latter example, theforloop is never reached since it's stuck in thedo/whileloop.To fix the first problem, I suggest using a conventional format string, e.g.
printf("This is = %d\n",i);With the newline at the end, theprintfwill normally be seen immediately (at least when not being redirected to a file). Alternatively, you can force the buffer to be flushed by callingfflush(stdout)immediately after callingprintf. That will work regardless of where your newlines are.The second problem can be fixed by incrementing
iprior to continuing, e.g.But a cleaner way to write the loop would be:
This shares the increment statement for both cases by avoiding the
continue.