Das Problem wird hier ran liegen :

if (data[0] || data[1] < 600) {rand();}

Ich schätze mal du willst hier testen ob data[o] ODER data[1] kleiner als 600 ist, right?

Dann musst du das aber so schreiben : if( data[0]< 600 || data[1] < 600)

Ansonsten hießt das soviel wie if( TRUE || data[1]<600) und er läuft sofort in rand().
Außer data[0] liefert direkt 0, dann wäre das ein false.