La ignore() serve per ignorare tutti gli eventuali caratteri fino al ritorno a capo (compreso), altrimenti la getline() non leggerebbe la riga successiva.
Come ti ho già scritto, se al momento della scrittura non separi i due valori interi, nella successiva fase di lettura ti ritrovi con x=1012, e y=0.
la variabile y vale 0 perché l'operatore di estrazione >> fallisce nella ricerca di un secondo valore intero dallo stream, l'indice nello stream punterà alla fine del file, vengono settati i bit di stato che segnalano lo stato e gli errori e tutti i seguenti tentativi di lettura dallo stream falliscono fintanto che non vengono resettati chiamando la funzione membro clear()