Es que no estaría de más que pusieras todo el código, aunque el error se pudiera ver desde el cacho que has puesto.
Igualmente algunos cambios que yo haría:
Cabe la posibilidad de que tu programa pete si no hay entrada ya que haces directamente "cin >> x", y para la estrucutra que tienes yo te recomentaría mejor en vez de hacer:
(lo expresaré sobre cin aunk es lo mismo para archivos)
cin >> x;
while (not fin archivo) { .....; cin >> x; }
Hacer:
while (cin >> x) {
....
}
Por otro lado, pero esto ya es por gusto mio, si estás leyendo una variable pues yo lo leería directamente, es decir, en vez de hacerlo en dos pasos:
cin >> s;
v[k].algo = s;
pues directamente cin >> v[k].algo;
Algo raro es que, sin decirnos ni los tipos, haces:
ficheroTel >> x; (3º línea)
Teniendo en cuenta que lo primero que se ve en la muestra que pones es un carácter deberé suponer que x es un char, ya que además lo copias en estat que es un char.
Al final haces:
ficheroTel >> x;
trucades[k].ext=x;
Pero ahí estás leyendo un char cuando en verdad deberías leer un número (82 en el primer ejemplo) y asignas el char a un int, que es trucades[k].ext. Si el problema es esto, que te has equivocado en este punto, se te hubiera arreglado directamente si no usaras variables intermedias y leyeras directamente sobre la variable final.
La lectura de datos, es decir todo el bucle, diría que lo puedes resumir en una simple línea:
while (ficheroTel >> trucades[k].estat >> trucades[k].data >> trucades[k].hora >> trucades[k].ext >> trucades[k].nom);