Jump to content

[C++] Ajuda: Leitura de ficheiro (Resolvido)


Virtual Void

Recommended Posts

Boas.

è o seguinte. tenho um ficheiro de texto com o seguinte la escrito(formatação igual ao file):

Joao 2344 Mecanica Ordinario Mestrado

Miguel 5432 Ciencias Especial Licenciatura

Carlos 8768 Matematica Ordinario Douturamento

o conteudo dest ficheiro vai ser lido pelo meu programa da seguinte forma:

while(!input.eof())
	{
		input>> nome >>numero>>cadeira>>regime >>situacao;             //ifstream input("File.txt");
		l.adiciona(nome,numero,cadeira,regime,situacao);	       //adiciona o que foi lido do file a uma lista ligada
	}

No entanto este pedaço de codigo faz uma leitura a mais do que devia. Desconfio que seja porque o EOF nao é encontrado no final da ultima leitura e por isso entra de novo no ciclo while. Estou correcto?  Como posso fazer para resolver este problema sem alterar a forma de fazer o input, ou seja continuar a utilizar o >> e nao utilizar get ou read ou seja o que for.

Obrigado

Cumprimentos

Link to comment
Share on other sites

Não sei, mas acho que ele faz uma leitura a mais devido a um "enter".

Verefica se o ficheiro termina mesmo no final da palavra Doutoramento, ou se tens algo assim "Doutoramento\n" ou "Doutoramento\n\n". Se for isto, o infile.eof() lê o '\n' e entra no ciclo.

Para tirar as teimas, usa a função int peek ( ); lê o char inicial de cada ciclo sem "mexer em nada", assim saberás qual foi o char que o infile.eof() leu onde devia parar.

Cumpr. bk@ero  😛

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.