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

(Resolvido) Comparação de strings


gladiador

Pergunta

// caras estou com um dilema

como posso fazer isto :

o cara digita um usuario e uma senha em tipo char pode ser :

char user[10] , senha[10];
 printf("digite usuario");

como colho o user em string ???

printf("digite a senha");
como colho a senha em string ??? e como eu checo ??
(if user == "teste" && senha == "teste"){
printf("autoriza");
}
else
{
printf("não autoriza");
}

não dá erro mas também não colhe nada , dá não autoriza ainda que o user e senha estejam corretas

tem algum macete ???

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Não tá colhendo amigo, quanto a rotina tudo bem, mas deve ter um macete para colher string

//

exemplo

char user[10] senha[10];
printf("digite user ");
scanf("%s", user);
printf("digite senha ");
scanf("%s", senha);
  if(user == "teste" && senha == "teste"){
 printf("ingress")
}
 else{
 printf("não ingressa")
}

ou seja, lógica é o de menos eu quero ver resgatar o user e senha , pois, não está fazendo ele simplesmente não ingressa

já tentei colher com & e nada , alguém sabe C aqui ???

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

  • 0

Tente assim:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(){
    char usuario[10];
    char senha[10];
    //Obtém os dados
    printf("digite o usuario: ");
    scanf("%s",&usuario);
    printf("digite a senha: ");
    scanf("%s",&senha);
    //Confirma os dados
    if (strcmp(usuario,"jonathan")==0 && strcmp(senha,"valor")==0){
        printf("Usuario e senha corretos !\n");
    }else{
        printf("Usuario ou senha invalidos\n");
    }
    system("pause");
}

Link para o comentário
Compartilhar em outros sites

  • 0
Não tá colhendo amigo, quanto a rotina tudo bem, mas deve ter um macete para colher string

//

exemplo

char user[10] senha[10];
printf("digite user ");
scanf("%s", user);
printf("digite senha ");
scanf("%s", senha);
  if(user == "teste" && senha == "teste"){
 printf("ingress")
}
 else{
 printf("não ingressa")
}

ou seja, lógica é o de menos eu quero ver resgatar o user e senha , pois, não está fazendo ele simplesmente não ingressa

já tentei colher com & e nada , alguém sabe C aqui ???

Cara, tu não podes comparar strings com igualdade(==). Tenta usar a função do C, chamada strcmp(string1, string2), que compara duas strings, e retorna o resultado da comparação, através de um valor. Se este valor for 0 (zero ), as duas strings são iguais, caso contrário são diferentes.

Dei uma pesquisada na net e to te passando o que entendi(já usei a strcmp e sei que funciona, mas tb não sou expert em C, estou te passando um pouco do que encontrei e achei bem interessante)

Na linguagem C ou C++ as strings não são "objetos de primeira classe", isto é, a linguagem em si não tem strings. O que é possível, é estender a linguagem com conceitos de strings. A linguagem suporta os tipos básicos int e double, número inteiro...

O padrão do C define que o tipo "int" tem de ter pelo menos 16 bits, e que o tipo "char" tem de ter pelo menos 8.

Além destes tipos básicos, a linguagem suporta ponteiros para estes. Um ponteiro é um número que se refere a uma posição na memória.

Na linguagem C, a convenção para representar uma string é representar como uma sequência de chars consecutivos na memória terminados com o valor "contra barra zero".

Quando fazes a declaração: char* str = "ABC"; o compilador cria no segmento de dados do programa a sequência 'A', 'B', 'C', 'contra-barra zero', e gera código para que a variável local str passe a ter o endereço do carácter 'A'.

A expressão (str + 1), por exemplo, é um ponteiro para o carácter 'B', e a expressão *(str + 2) significa o carácter apontado por (str + 2), logo 'C', e é equivalente da expressão str[2].

Se eu declarar dois arrays de caracteres como fizeste, haverão duas regiões no segmento de dados não inicializados com espaço para 10 caracteres, e as variáveis que declaraste tomarão cada uma o endereço do primeiro dos caracteres em cada um dos arrays.

Por essa razão, a comparação será sempre falsa, porque por mais que os dois arrays contenham os mesmos caracteres, estes estão em zonas diferentes da memória.

Espero ter ajudado.

[]'s

Jeferson Neves

Link para o comentário
Compartilhar em outros sites

  • 0

Seria assim a forma adequada de se fazer esse exercício. Só usei o sinal de negação "!" que é equivalente a fazer == 0

Dá uma olhada:

#include<stdlib.h>
#include<string.h>

int main(){
    char usuario[10];
    char senha[10];
    //Obtém os dados
    printf("digite o usuario: ");
    scanf("%s", usuario);
    printf("digite a senha: ");
    scanf("%s", senha);
    //Confirma os dados
    if (!strcmp(usuario, "teste") && !strcmp(senha,"teste"))
	{
        printf("Usuario e senha corretos!\n");
    }else
	{
        printf("Usuario ou senha invalidos\n");
    }
    system("pause");
}

Assim está dando certo e, pelo que aprendi, é a maneira correta para se comparar Strings em C.

Em C não se usa o == para comparar Strings de forma alguma. Para isso tem a função strcmp() da biblioteca "string.h"

Link para o comentário
Compartilhar em outros sites

  • 0

Para entender de maneira simples o q a função strcmp() faz é o seguinte:

Essa função não pergunta se as Strings são iguais, o q ela faz é perguntar se elas são diferentes, ou seja: A String usuario é diferente da String teste? Não! Então ok! a 1ª condição é verdadeira. Por isso o sinal de negação. 

O mesmo acontece com a senha. A String senha é diferente de teste? Não. Então ok! As duas condições são verdadeiras e por isso o bloco if é executado.

Essa é a maneira ideal para entender o q a função strcmp() faz.

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...