Guest Igor Postado Junho 9, 2004 Denunciar Share Postado Junho 9, 2004 Quando digitados logins errados, e acusa com o printf.. okmas quando dado o login e senha correta, torna a acusar que o login esta errado seguido de um segment fault.. #include <stdio.h>int logar(char login, char senha){ if(login == "igor" && senha == "senha") { printf("logado\n"); } else { printf("login ou senha incorreto\n"); }}int main(void){ char login; char senha; system("clear"); printf("+-------------------------------------------+\n"); printf(" programa p/ logar-se \n"); printf("+-------------------------------------------+\n\n"); printf("login: "); scanf("%s", &login); printf("senha: "); scanf("%s", &senha); logar(login,senha);} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ServeR Postado Junho 9, 2004 Denunciar Share Postado Junho 9, 2004 (editado) Boas,n podes fazer isto: if(login == "igor" && senha == "senha")para comparares strings usas o strcmp(srt1,str2)scanf("%s", &senha);usa antes gets(senha)ao usares o scanf("%s", &senha) n podes colocar o & definindo assim isto: char login; só estas a dispor de 1 caracter para o login #include <stdio.h> #include <string.h> int logar(char login[], char senha[]) { if(strcmp(login,"igor") && strcmp(senha,"senha")) { printf("logado\n"); } else { printf("login ou senha incorreto\n"); } } int main(void) { char login[12]; char senha[12]; system("clear"); printf("+-------------------------------------------+\n"); printf(" programa p/ logar-se \n"); printf("+-------------------------------------------+\n\n"); printf("login: "); gets(login); printf("senha: "); gets(senha); logar(login,senha); } Assim deve funcionar na perfeição Fikem bem Editado Junho 9, 2004 por ServeR Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ServeR Postado Junho 9, 2004 Denunciar Share Postado Junho 9, 2004 Então, funciona???? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Igor Postado Junho 9, 2004 Denunciar Share Postado Junho 9, 2004 Server,Não funcionou.. está bem estranho agora.. quando digita login/senha loucos.. ele dá que está logado.. e quando digita o certo, diz que esta incorreto.. viu.. uso o gcc como compilador, não interferiria não é? !mas valeu pelo codigo.. entendi direitinho Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Junho 9, 2004 Denunciar Share Postado Junho 9, 2004 Oi, Fiz um teste e conclui que o problema deve estar no uso da função strcmp.Neste teste criei uma função, mesmo porque não sei usar a srtcmp direito, veja: #include <stdio.h> #include <string.h> #include <stdlib.h> /* NOVA FUNÇÃO */ bool comparar(char str1[], char str2[]) /* Recebe 2 strings como argumentos; */ { bool status = 1; /* Cria uma variável do tipo bool (0 e 1) com o valor 1; */ for (int i = 0; str1[i] != '\0'; i++) /* Estrutura de repetição for; */ if (str1[i] != str2[i]) /* Se elemento atual de str1 == elemneto atual de str2; */ status = 0; /* status = 0.*/ return status; /* Retorna o valor de status */ } /* FIM DA NOVA FUNÇÃO */ int logar(char login[], char senha[]) { if((comparar(login, "igor")) == 1 && (comparar(senha, "senha")) == 1) { printf("logado\n"); } else { printf("login ou senha incorreto\n"); } } int main(void) { char login[12]; char senha[12]; system("clear"); printf("+-------------------------------------------+\n"); printf(" programa p/ logar-se \n"); printf("+-------------------------------------------+\n\n"); printf("login: "); gets(login); printf("senha: "); gets(senha); logar(login,senha); } Veja a função comparar, ela começa com a inicialização da variável status do tio bool, que só pode armazenar 0 ou (falso ou verdadeiro): bool status = 1; /* Cria uma variável do tipo bool (0 e 1) com o valor 1; */ Dopois é criada uma estrutura de repetição for que compara elemento por elemanto do array até o caractere nulo necessário no final de toda string, e se for diferente status = 0 (false). Veja: for (int i = 0; str1[i] != '\0'; i++) /* Estrutura de repetição for; */ if (str1[i] != str2[i]) /* Se elemento atual de str1 == elemneto atual de str2; */ status = 0; /* status = 0.*/ Agora a função que desenvolvi chega ao fim retornando o valor de status. return status; /* Retorna o valor de status */ } A função logar só verifica se as duas comparações retornaram 1 (true). Se isso for verdadeiro mostra a mensagem "logado" e termina a linha, senão mostra "login ou senha incorreto" na tela e acaba a linha. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Igor Postado Junho 10, 2004 Denunciar Share Postado Junho 10, 2004 Funciona.. mas o código acabou ficando muito complicado :/Mas valeu pela colaboração Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Igor Postado Junho 10, 2004 Denunciar Share Postado Junho 10, 2004 Resolvi o problema do código.. ele estava trabalhando inversamente, dae mudei isso:<code> if(!(strcmp(login,"igor") && strcmp(senha,"senha"))) { ... </code>reparem que eu coloquei um "!" na operacao.. mas não entendi porque ele funciona inverso no php trabalha inverso disso, vivendo e aprendendo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ServeR Postado Junho 10, 2004 Denunciar Share Postado Junho 10, 2004 if(!(strcmp(login,"igor") && strcmp(senha,"senha"))) quer dizer se for diferente de "igor" e "senha" ..... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Wicker Man Postado Junho 10, 2004 Denunciar Share Postado Junho 10, 2004 Alô, pessoas! O suposto problema com a função "strcmp()" é que ela retorna 0 se as duas strings forem iguais, sendo que 0 em C++, como já foi citado pelo Douplus, é considerado false nas condições.Assim, o programa do server ficaria assim:void logar(char login[], char senha[]){ if( strcmp( login, "igor" ) == 0 && strcmp( senha, "senha" ) == 0 ) printf("logado\n"); else printf("login ou senha incorreto\n");}Mudei também o tipo de retorno de int para void, uma vez que a função não retorna nenhum valor.Até mais! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest Igor
Quando digitados logins errados, e acusa com o printf.. ok
mas quando dado o login e senha correta, torna a acusar que o login esta errado seguido de um segment fault..
#include <stdio.h>
int logar(char login, char senha)
{
if(login == "igor" && senha == "senha") {
printf("logado\n");
}
else
{
printf("login ou senha incorreto\n");
}
}
int main(void)
{
char login;
char senha;
system("clear");
printf("+-------------------------------------------+\n");
printf(" programa p/ logar-se \n");
printf("+-------------------------------------------+\n\n");
printf("login: ");
scanf("%s", &login);
printf("senha: ");
scanf("%s", &senha);
logar(login,senha);
}
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.