meinst du vielleicht (run == 0) in deinem if ?
(run=0) setzt run auf 0 und liefert nebenbei immer false zurück.
if ( run=1 ) ist immer true, und verändert run ...
Schon schlimm, dass solche Sachen in C syntaktisch richtig sind und nicht mal Warnungen produzieren ...