• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Virtual Void

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

4 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o eof só retorna true depois de ele tentar ler um dado do ficheiro e não conseguir.

Eu so programo C, mas adicionaria depois do input >> um "if (input.eof()) break;"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora