Ho questo programma che memorizza da un file dei nomi e li inserisce in una lista. Tuttavia dopo che l'inizializzazione è eseguita e pure la stampa, l'applicazione non termina. Bensì rimane in attesa, come se si aspettasse che dovessi inserire dei valori. Questo è il codice, qualche idea?
codice:
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int const MAX_S = 50;

struct elem{
	int inf;
	char str[MAX_S];
	elem* next;
};

typedef elem* lista;

class Ufficio{
	lista testa;
	int num;
public:
	Ufficio(const char*);
	void arriva(const char*);
	
	friend ostream& operator<<(ostream&, const Ufficio&);
};

//Function
void insTesta(lista& li, const char* s, int n){
	elem* p = new elem;
	strcpy(p->str, s);
	p->inf = n;
	p->next = li;
	li = p;
}	

//Function Member
Ufficio::Ufficio(const char* s){
	testa = NULL;
	num = 1;
	char str[MAX_S];
	ifstream in(s);
	if(!in)
	{
		cerr << "Errore apertura file";
		exit(1);
	}
	while(in >> str)
		arriva(str);
}

void Ufficio::arriva(const char* s){
	elem* p;
	elem* q;
	for(q=testa; q!=NULL; q=q->next)
		p = q;
	q = new elem;
	q->inf = num++;
	strcpy(q->str, s);
	q->next = NULL;
	if(testa==NULL)
		testa = q;
	else
		p->next = q;
}

ostream& operator<<(ostream& os, const Ufficio& uf){
	os << "Cognome\t\t" << "Numero\n";
	elem* p = uf.testa;
	lista prov = NULL;
	while(p!=NULL)
	{
		insTesta(prov, p->str, p->inf);
		p=p->next;
	}
	p = prov;
	while(p!=NULL)
	{
		os << p->str << "\t\t" << p->inf << endl;
		p = p->next;
	}
	return os;
}

int main(){
	Ufficio uf("registro.txt");
	cout << uf;
	return 0;
}