Duvida codigo c. não funciona como estava a espera e não percebo porque

DaWrath

Power Member
Boas, estou com um pequeno problema num programa em c. Tenho dois menus num programa, um para utilizador normal e outro para administrador. Por "desporto" decidi fazer umas pequenas linhas de codigo a pedir uma password e depois comparar com uma ja atribuida para ter acesso ao menu do admin. O codigo está aqui:
Código:
                       char password[10]={'b','a','n','a','n','a'}, passtry[10];
                       printf("Insira password\n");
                       fflush(stdin);
                       gets(passtry);
                       if(strcmp(passtry, password)) menuadmin();
                       else printf("Password incorrecta\n");

Segundo uma consulta que fiz no google a comparação de strings está correcta desta forma, e é por isso que não percebo porque é que mesmo que vá para o menu do admin não apareça a mensagem de pass errada, pois tbm acho que está bem atribuido e mesmo que não estivesse devia de dar erro de compilação ou tinha de imprimir a mensagem. Alguem me pode ajudar? :)
 
Boas, estou com um pequeno problema num programa em c. Tenho dois menus num programa, um para utilizador normal e outro para administrador. Por "desporto" decidi fazer umas pequenas linhas de codigo a pedir uma password e depois comparar com uma ja atribuida para ter acesso ao menu do admin. O codigo está aqui:
Código:
                       char password[10]={'b','a','n','a','n','a'}, passtry[10];
                       printf("Insira password\n");
                       fflush(stdin);
                       gets(passtry);
                       if(strcmp(passtry, password)) menuadmin();
                       else printf("Password incorrecta\n");

Segundo uma consulta que fiz no google a comparação de strings está correcta desta forma, e é por isso que não percebo porque é que mesmo que vá para o menu do admin não apareça a mensagem de pass errada, pois tbm acho que está bem atribuido e mesmo que não estivesse devia de dar erro de compilação ou tinha de imprimir a mensagem. Alguem me pode ajudar? :)

Atenção que a compração está bem feita mas não estás a testar se as strings são iguais. o strcmp devolve 1, 0 ou -1 sendo que devolve 0 quando as strings são iguais. O que tens de ver é se o valor do strcmp ==0. Algo deste tipo:

Código:
                       char password[]={'b','a','n','a','n','a', '\0'}, passtry[10];
                       printf("Insira password\n");
                       fflush(stdin);
                       gets(passtry);
                       if(strcmp(passtry, password)==0) menuadmin();
                       else printf("Password incorrecta\n");

http://www.elook.org/programming/c/strcmp.html
 
Última edição:
Uma string em C é um array de caracteres em que o último caracter é obrigatoriamente o caracter terminador de string '\0'. Esse array não está bem inicializado. Já que estás a inicializar a password de forma estática, podes fazer de 2 formas:
Código:
char password[10]={'b','a','n','a','n','a','\0'};
ou
Código:
const char* password = "banana";

PS: E o que o Dagas disse, excepto que o retorno da função strcmp não é 1, -1 ou 0. É um valor que indica a relação entre ambas as strings. Um valor maior que 0 indica que a 1ª string é maior que a 2ª (maior significa ser alfabeticamente depois que a outra), um valor negativo significa que a 2ª string é maior. Quando o valor de retorno for 0 é porque são iguais.
 
Última edição:
Back
Topo