260 likes | 273 Views
Learn about loop statements (for, while, do-while), break and continue statements, and switch statements in C programming. Understand their usage and examples.
E N D
CSCI 130 Advanced Program Control Chapter 8
Program Controls so far • for loop • while loop • do…while loop
The break statement • Can be placed inside the body of a loop • When break is encountered, loop is exited (regardless of the condition) • Execution passes to first statement outside the loop • A break inside a nested loop only causes exiting of the innermost loop
break example • for (count = 0; count <= 10; count ++) • { • if (count == 5) • break; • } • Without break loop iterates 11 times • With break, loop stops during 6th iteration
Another break example • Write a for loop that will search a 10 element array for the value 12. • for (i = 0; i < 10; i ++) { //for written with no break • if (arrayName[i] = 12) //this is less efficient • foundFlag = ‘Yes’; //Entire array always • } //searched • ----------------------------------------------------------------------------- • for (i = 0; i < 10; i++) { //for written with break • if (arrayName[i] = 12) { //more efficient • foundFlag = ‘Yes’; //if 12 is first element • break; //than loop only entered • } //once • }
The continue statement • Can be placed within the body of a loop • When continue encountered, control passes to the next iteration of the loop • Statements between continue and end of loop not executed • Significantly different than break
Example of continue • for (count = 0; count <= 10; count ++) • { • if (count == 5) • continue; • printf(“%d ”, count); • } • Loop iterates 11 times, with or without continue statement • Output: 1 2 3 4 6 7 8 9 10 • 5 is skipped
Another continue example Write the code to check an array of 100 elements. Write out only those elements in the array that are not prime for (i = 0; i < 100; i++) { if (numIsPrime(arrayName[i])) continue; printf(“\n%d”, arrayName[i]); } Note: numIsPrime will return a positive number for primes
The goto statement • C’s unconditional branching statement • goto and target statement must be in the same function • goto can always be performed using better structures (do…while, etc.) • NEVER use a goto
Example of a goto • void main ( ) { • int count= 3; • printf("Before any goto %d\n", count); • goto location0; • printf("This will not print out\n"); • location0: ; • printf("At location 0\n"); • location1: ; • printf("At location 1\n"); • }
Strong suggestion about goto NEVER USE A GOTO
Infinite Loops • Condition will never be evaluated as false • Theoretically would run forever • Avoid infinite loops
Examples of an infinite loop • for (i = 0; i < 10; i+1) //i+1 does not change • printf(“%d”, i); //the value of i • --------------------------------- • while ( i < 10) { //Programmer thinks • printf(“%d”, i); //i always starts greater • i-=1; //than 10 • } • ---------------------------------- • for (i = 1; i !=10; i +=2) //Printing out odd ints • printf(“%d”, i); //up to 10?
The switch statement • Most flexible program control statement • Program control based on an expression with more than 2 possible values
Referencing elements in an array • General form of switch statement: • switch(expression) • { • case template1: • statements; • case template2: • statements; • … • case templaten: • statements; • default: • statements; • }
Concrete example of switch • switch(i) { • case 1: • printf(”The number is 1”); • case 2: • printf(“The number is 2”); • case 3: • printf(”The number is 3”); • default: • printf(”The number is not 1, 2, or 3"); • }
Evaluation of a switch statement • If expression matches a template, control passes to first statement within that template • If no match, control passes to first statement within default • If no match and no default, control passed to first statement after switch structure
Output of switch statement • switch(i) { • case 1: • printf(”The number is 1\n”); • case 2: • printf(“The number is 2\n”); • case 3: • printf(”The number is 3\n”); • default: • printf(”The number is not 1, 2, or 3\n"); • } • If i = 1 • Output: • The number is 1 • The number is 2 • The number is 3 • The number is not 1, 2, or 3
Correct way to code a switch • switch(i) { • case 1: • printf(”The number is 1\n”); • break; • case 2: • printf(“The number is 2\n”); • break; • case 3: • printf(”The number is 3\n”); • break; • default: • printf(”The number is not 1, 2, or 3\n"); • }
System functions • All within stdlib.h file (must be included) • exit( ) • terminates execution • atexit( ) • performs functions at program termination • system( ) • executes operating system commands
exit ( ) function • Terminates program execution • #include <stdio.h> • #include <stdlib.h> • void main ( ) { • char i; • exit(0); • printf("Enter a character"); //These statements will • scanf("%c", &i); //not be executed • }
exit ( ) function continued • If 0 is passed into function it means program executed normally • If 1 is passed into function it means program abnormally terminated • stdlib.h has two symbolic constanst: • #define EXIT_SUCCESS 0 • #define EXIT_FAILURE 1 • can call exit(EXIT_SUCCESS) • can call exit(EXIT_FAILURE)
atexit ( ) function • Specifies one (or more) functions that are automatically executed at termination time • Up to 32 functions can be registered in this way • Executed in reverse order
atexit( ) function continued • #include <stdio.h> • #include <stdlib.h> • void cleanup(); • void cleanupLast(); • void main ( ) { • char i; • atexit(cleanupLast); • atexit(cleanup); • printf("Enter a character"); • scanf("%c", &i); • }
system ( ) function • Executes operating system commands • Example: • system(“c:\dir *.exe”); • Must capture any output in a file • will not open up another console • will not print to current console • Can execute any command line • system(“c:\winnt\system32\notepad.exe”);
system( ) does not work in CW • system( ) function does not work in Code Warrior • Help states: • “The system() function is an empty function that is included in the Metrowerks stdlib.h to conform to the ANSI C Standard Library specification.”