Ir para conteúdo
Fórum Script Brasil
  • 0

Problema No Código


Guest Igor

Pergunta

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

  • 0

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 & wink.gif

definindo assim isto: char login; só estas a dispor de 1 caracter para o login wink.gif

#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 wink.gif

Fikem bem

Editado por ServeR
Link para o comentário
Compartilhar em outros sites

  • 0

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 smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 sad.gif

no php trabalha inverso disso, vivendo e aprendendo. cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Alô, pessoas! tongue.gif

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! biggrin.gif

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...