Ir para o conteúdo
jOrGe.mRNh

Detecção de ENTER para passar a frente um campo

Mensagens Recomendadas

jOrGe.mRNh

Boas,

Preciso de ajuda nesta pequena parte de código. Isto trata-se de uma funçao para alterar uns dados já introduzidos no programa e eu quero que no caso de alguém não quiser alterar um certo campo, este salte esse campo quando o ENTER é premido.

printf("dado actual: %s",x);
printf("Insira o novo dado: ");
if(getchar()=='\n') gets(x);

Isto funciona, o problema é que quando alguem quer alterar este campo, imaginamos que escreve "ana", a string so recebe "na" pois o primeiro carácter fica no getchar, certo?

Há alguma forma simples de ultrapassar este problema? Não me estou a lembrar de nenhuma e precisava de ajuda,

Cumps

Editado por pmg
Falta LP; substituir backspace por ENTER

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Quando fazes gets() e o utilizador carrega apenas em ENTER, o resultado é a string vazia.

Nao precisas de nada especial para o efeito que pretendes.

mas nao uses gets()! é impossivel usar esta funcao de forma segura e existe uma outra que a pode perfeitamente substituir: fgets().

Alem disto, a ultima versao do Standard nao contem a funcao gets(). Quando todos os compiladores passarem a usar C11, o teu programa deixa de ser valido.

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jOrGe.mRNh

Boas,

Muito obrigado pela ajuda,

O fgets penso que não funciona aqui, uma vez que se trata de uma função para usar com ficheiros. Eu estou a tratar só mesmo com um ficheiro.

Quanto ao programa, tou a testá-lo e se o utilizador pretender alterar o campo, o caracter que vai testar a ver se e o \n vai ser o primeiro caracter que introduz, e se meter por exemplo "ana" o primeiro a nao fica guardado na string x. :S

Como posso dar a volta a isto?

Cumps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

O fgets penso que não funciona aqui, uma vez que se trata de uma função para usar com ficheiros. Eu estou a tratar só mesmo com um ficheiro.

Tudo é um ficheiro !!!

fgets(buffer, buffer_size, stdin); // stdin <-> normalmente é o teclado

Quanto ao programa, tou a testá-lo e se o utilizador pretender alterar o campo, o caracter que vai testar a ver se e o \n vai ser o primeiro caracter que introduz, e se meter por exemplo "ana" o primeiro a nao fica guardado na string x. :S

Como posso dar a volta a isto?

char buffer[256];

// ler o teclado
fgets(buffer, 256, stdin);

// remover o carater '\n' se existir
if (buffer[strlen(buffer) - 1] == '\n');
 buffer[strlen(buffer) - 1] = '\0';

// verificar entrada vazia
if (strlen(buffer) == 0)
{
 // entrada vazia
}
else
{
 // dados inseridos
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jOrGe.mRNh

Boas,

Muito obrigado pela ajuda.

Acabei por optar por utilizar um caracter em vez do enter. Apesar de nao ser tao intuitivo, o programa e suposto ser avaliado com material mais simples de c :S

Cumps

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.