Jump to content
Alvess

Palavra passe

Recommended Posts

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?

:) :) :( :( :(

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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");

?

Share this post


Link to post
Share on other 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> ;)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.