Ir para o conteúdo
Alvess

Palavra passe

Mensagens Recomendadas

Alvess

Olá!

Tenho um problema num programa, é assim para entrar o utilizador deve introduzir a palavra passe.

Se o utilizador introduziu a palavra passe errada mais do que 3 vezes, então já não permite mais entrar.

Só que aqui não consegui fazer isto:

if (p_pass!= 1234)

{

do

{

printf("A palavra passe que foi introduzido esta errada. Tenta novamente :\n");

scanf("%d",&p_pass);

}

while(p_pass != 1234);

}

Ou temos de utlizar mais ciclo encadeado naquele ciclo?

se assim, como é que devemos fazedr isto?

:) :) :( :( :(

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Não podes comparar strings com o operador !=. Tens de utilizar funções como strcmp.

Podes ter uma variável que depois do ciclo vai-te "dizer" se podes entrar ou não.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

Podes apenas adicionar um contador, e adicionar à guarda do ciclo se esse contador ainda não excedeu 3 tentativas.

Ou seja, a condição do ciclo fica algo como

while (++contador < 3 && p_pass != 1234);

Com o ++ antes da variável, esse contador já está a ser incrementado


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

@softclean: assim ele vai para o mesmo sítio de qualquer das maneiras (quer introduza a palavra-passe correcta ou não).


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

Sim, tornava-se necessário colocar um if no final, para verificar as tentativas. Mas mesmo assim, no caso particular de acertar na última tentativa, ia dar barraca, porque não havia distinção se a última tentativa estava ou não certa.

Para corrigir isso, pode-se adicionar mais uma variável, por exemplo, acertou com o valor 0/1 e confirmar a partir daí. Neste caso, o contador apenas tem a função de limitar as tentativas. De notar que ambas as variáveis (contador e acertou devem ser inicializadas a 0).


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
daj

Porque não

int p_pass, n_tentativa = 0;

do {
  printf("Password: ");
  scanf("%d", &p_pass);
  if (p_pass == 1234)
    break;
  printf("Password inválida\n");
}
while (++n_tentativa < 3);

if (n_tentativa == 3)
  printf("Máximo de tentativas\n");

?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
andre_mz

Tal como o LocalHost disse e parece que ninguém "ligou", as strings só podem ser comparadas através do strcmp.

#include <string.h> ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

andre_mz, neste caso acho que isso não acontece, porque os tipos de dados são integer (a julgar pelo tipo de dados esperado pela expressão do scanf (%d)).

BTW, a solução do daj é interessante, e resolve o caso.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

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.