/* I favor other, which might disqualify, but... */ #include #include #include #include jmp_buf escape; /* NOTE: to save memory, the low byte of results is used as a buffer *\ \* NOTE: notice the shifts (and adding 256 for each vote) to fix it. */ vcc(int vote, int results[4]); int main(void) { int results[4]; memset(results, 0, 4 * sizeof(int)); if (!setjmp(escape)) do { vcc(read(0, results, 1), results); } while (1); results[0] >>= 8; results[1] >>= 8; results[2] >>= 8; results[3] >>= 8; printf("Bush: %d Kerry: %d Nader: %d Other: %d\n", results[0], results[1], results[2], results[3]); } vcc(int vote, int results[4]) { if (vote <= 0) /* EOF TRAP */ longjmp(escape, 1); if (!isspace(vote)) switch (vote) { case 'K': results[1]+=256; break; case 'B': results[0]+=256; break; case 'N': results[2]+=256; break; default: results[3]+=256; break; } }