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

machi

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

7 mensagens neste tópico

Boa noite.

Estou com um pequeno problema.

Após implementar esta funcao verifico que o que é apresentado no monitor é apenas lixo.

void LerMensagem(int N)
{
ifstream f("portugues.txt");
char Mens[100];
for (int i=0 ; i<N-1 ; i++)
	f.getline(Mens,100);
cout << Mens<<endl;
f.close();
}

Não consigo visualizar nada do que está no ficheiro.

A leitura é feita para um menu onde estarão as opções do programa.

int MenuPrincipal()
{
int op;
cout << "*******************************"<<endl;
LerMensagem(0);
LerMensagem(1);
LerMensagem(2);
LerMensagem(3);
LerMensagem(4);
LerMensagem(5);
LerMensagem(6);
cin >> op;
return op;
}

O que poderá estar mal implementado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só vejo dois problemas aí, mas que não deviam fazer o código não funcionar:

- Ao chamares LerMensagem(0), o for (int i=0 ; i<N-1 ; i++) não xega a fazer nada.

- A função LerMansagem é ineficiente, porque para leres uma linha vais ler o ficheiro todo desde o início.

Que quantidade de "lixo" vês?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No monitor aparecem cerca de duas linhas e meia de caracteres sem sentido

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No monitor aparecem cerca de duas linhas e meia de caracteres sem sentido

E a seguir a essas linhas já fica tudo ok? é que quando fazes LerMensagem(0) e LerMensagem(1) não estás a ler rigorosamente nada do ficheiro, porque nestes casos N-1 é -1 e 0 respectivamente, portanto o código dentro do ciclo for não chega a ser executado.

O problema é que depois vais ler o conteudo do Mens, e como o ciclo for não chegou a ser executado, essa variável não foi inicializada, logo o que te vai aparecer sao 200 vezes lixo (100 vezes no LerMensagem(0) e outras 100 no LerMensagem(1)).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ao fim de aparecer o lixo aparecem-me mais algumas linhas em branco e dps o cursor aparece a seguir a essas linhas em branco...

Terei entao que mudar o valor do N ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, se o objectivo do N é ser o número de linhas a ler, deves mudar N-1 para N.

Mas convem inicializares a variável Mens para não imprimires lixo no caso de não leres nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas!!

concordo com iniciares a var Mens a vazio...

outra coisa k tambem convém ver o k esta escrito e em codificação foi escrito o ficheiro...e se não me engano o c++ trabalha com ANSI..

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