#include #include /* * This program reads in a series of integers and sorts them using a bubble * sort. It is written using goto and if() goto instead of sane looping * constructs. * * Do not try this at home. * * I hope it is not a mystery why we don't use goto anymore. */ #define SIZE 100 main() { int nums[SIZE]; // Numbers. int count; // How many int limit; // Pair scan limit. int tmp; // Exchange tmp. // Read in some integers. int i = 0; reader: if(i >= SIZE) goto toobig; if(scanf("%d", &nums[i]) != 1) goto read_done; i++; goto reader; read_done: count = i; // Most of this stuff breaks with size zero. if(count <= 0) goto nothing; // Sort won't work properly with one value. And isn't needed. if(count <= 1) goto doprint; limit = count - 2; // Scan for out-of-order pairs. pairscan: i = 0; // See if the pair at [i] and [i+1] is in order, and swap them // if not. pairswap: if(nums[i] <= nums[i+1]) goto keep; tmp = nums[i]; nums[i] = nums[i+1]; nums[i+1] = tmp; keep: // Increment pair scan, and repeat the pair swap if needed. if(++i <= limit) goto pairswap; // Reduce the pair scan limit, and perform the next one // if needed. if(--limit >= 0) goto pairscan; doprint: // Print the sorted list. i = 0; printloop: printf("%d ", nums[i]); if(++i < count) goto printloop; printf("\n"); nothing: exit(0); toobig: printf("More than %d input values.\n", SIZE); exit(1); }