Alvess 0 Posted February 25, 2011 Report Share Posted February 25, 2011 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? :) :( Link to post Share on other sites
Localhost 3 Posted February 25, 2011 Report Share Posted February 25, 2011 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 Link to post Share on other sites
softklin 11 Posted February 25, 2011 Report Share Posted February 25, 2011 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. Link to post Share on other sites
Localhost 3 Posted February 25, 2011 Report Share Posted February 25, 2011 @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 Link to post Share on other sites
softklin 11 Posted February 25, 2011 Report Share Posted February 25, 2011 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. Link to post Share on other sites
daj 0 Posted February 25, 2011 Report Share Posted February 25, 2011 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"); ? Link to post Share on other sites
Alvess 0 Posted February 25, 2011 Author Report Share Posted February 25, 2011 Muito Obrigado pela vossa ajuda. :) :( Link to post Share on other sites
andre_mz 0 Posted March 1, 2011 Report Share Posted March 1, 2011 Tal como o LocalHost disse e parece que ninguém "ligou", as strings só podem ser comparadas através do strcmp. #include <string.h> Link to post Share on other sites
softklin 11 Posted March 1, 2011 Report Share Posted March 1, 2011 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. Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now