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

tmcp

Problema com gets!!!

12 mensagens neste tópico

boas!! Tenho aqui um problema com uns quantos gets (get string) :wallbash:. O problema é que o programa salta me os gets de toda a forma. Alguem tem alguma ideia de como isto pode acontecer?

desde já obrigado a todos!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso deve acontecer porque teres caracteres no buffer de entrada.

E já agora, por questões de segurança, devias usar antes o fgets.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado pela resposta achas que deva utilizar o fgets(com stdin é claro) ou flush?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O flush (ou fflush pressuponho?) não é para aqui chamado, visto se estar a falar do stdin e essa função ser para buffers de escrita e não de leitura como é o caso (apesar de em windows até ser capaz de funcionar).

O fgets deve ser usado por questões de segurança mas não te vai resolver o problema. Para resolver o problema vais ter que meter uma função de leitura aí pelo meio.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é que isto é mesmo esquisito! nunca me aconteceu isto. O fgets ta implementado dentro de uma funcao como outra qq. Penso que nao seja esse o problema!

Se puser um pouco do codigo axas que consegues mais ou menos ver o "erro"?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é que isso nem sempre funciona (ou melhor, não funciona em todas as plataformas).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epa o fflush funcionou mas sempre que tento fazer fgets o programa salta me esse e so me le o proximo. Parece que le fgets com numero par!! E para ler esses fgets tenho que por um fflush(stdin) antes, coisa que nao vou fazer para todos os fgets que tenho.

Se souberes alguma forma de ultrapassar isto..vou estando por aqui! Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Simplesmente estás a deixar dados no buffer de entrada.

Isso é muito comum quando se lê, por exemplo, um inteiro, e na linha seguinte uma string.

O \n da linha do inteiro não é descartado, e é isso que o fgets lê.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja consegui resolver com um getchar(). O fflush nao me faz nada no linux!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja consegui resolver com um getchar(). O fflush nao me faz nada no linux!

Não foi o que te disseram? Jeeez...

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