Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Continue statment

I am new to C, thus encountered with this, Continue statement is for skipping the iteration but here my code is

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

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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.

>Solution :

There are a couple of things going on here. First, The printf format 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 i is 10, it goes into an infinite loop. Each time through, it does the comparison i == 10, which is true, so it immediately continues the loop, never executing the i++; increment. In the latter example, the for loop is never reached since it’s stuck in the do/while loop.

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, the printf will normally be seen immediately (at least when not being redirected to a file). Alternatively, you can force the buffer to be flushed by calling fflush(stdout) immediately after calling printf. That will work regardless of where your newlines are.

The second problem can be fixed by incrementing i prior to continuing, e.g.

if (i == 10) {
    i++;
    continue;
}

But a cleaner way to write the loop would be:

do {
  if (i != 10) {
      printf("This is = %d\n", i);
  }
  i++;
} while (i<20);

This shares the increment statement for both cases by avoiding the continue.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading