Il goto fa un salto incondizionato (equivale al jmp in assembler). Quindi non hai il controllo del codice.
leggi quì:
http://it.wikipedia.org/wiki/Spaghetti_cod
il numero di volte dentro il record non ti serve perche lo ricavi da quante celle ha l'array di record. Qui puoi usare il std::vector o se non l'hai imparato usi l'allocazione dinamica di memoria per ogni cella nuova creata.
l'operatore >> fa la formattazione dei dati. Se tu li chiedi un int lui trasforma il dato letto in un int. con get() e put() i dati vengono estratti come char, la dimensione del quale equivale sempre un byte (in qualsiasi compilatore, è definito dallo standard). tutte le altre formattazioni dipendono dal compilatore e SO.