  Sort Using Goto #include <stdio.h>
#include <stdlib.h>

/*
* 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;
if(i >= SIZE) goto toobig;
if(scanf("%d", &nums[i]) != 1) goto read_done;
i++;
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);
}