Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com
Answertopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

The GNU C Programming Tutorial - The flexibility of for

Node:The flexibility of for, Next:, Previous:for, Up:Loops



The flexibility of for

As mentioned above, C's for construct is quite versatile. You can use almost any statement you like for its initialization, condition, and increment parts, including an empty statement. For example, omitting the initialization and increment parts creates what is essentially a while loop:

int my_int = 1;

for ( ; my_int <= 20; )
{
  printf ("%d ", my_int);
  my_int++;
}

Omitting the condition part as well produces an infinite loop, or loop that never ends:

for ( ; ; )
{
  printf("Aleph Null bottles of beer on the wall...\n");
}

You can break out of an "infinite loop" with the break or return commands. (See Terminating and speeding loops.)

Consider the following loop:

for (my_int = 2; my_int <= 1000; my_int = my_int * my_int)
{
  printf ("%d ", my_int);
}

This loop begins with 2, and each time through the loop, my_int is squared.

Here's another odd for loop:

char ch;

for (ch = '*'; ch != '\n'; ch = getchar())
{
  /* do something */
}

This loop starts off by initializing ch with an asterisk. It checks that ch is not a linefeed character (which it isn't, the first time through), then reads a new value of ch with the library function getchar and executes the code inside the curly brackets. When it detects a line feed, the loop ends.

It is also possible to combine several increment parts in a for loop using the comma operator ,. (See The comma operator, for more information.)

#include <stdio.h>

int main()
{
  int up, down;

  for (up = 0, down=10; up < down; up++, down--)
  {
    printf("up = %d, down= %d\n",up,down);
  }

  return 0;
}

The example above will produce the following output:

up = 0, down= 10
up = 1, down= 9
up = 2, down= 8
up = 3, down= 7
up = 4, down= 6

One feature of the for loop that unnerves some programmers is that even the value of the loop's conditional expression can be altered from within the loop itself:

int index, number = 20;

for (index = 0; index <= number; index++)
{
  if (index == 9)
  {
    number = 30;
  }
}

In many languages, this technique is syntactically forbidden. Not so in the flexible language C. It is rarely a good idea, however, because it can make your code confusing and hard to maintain.

 
 
  Published under free license. Design by Interspire