K3L3M0 0 Denunciar post Postado Maio 27, 2010 Estou usando o seguinte código, mas está dando 2 erros que eu sei. 1º - Estou usando variavel do tipo char, mas é muito pequena para caber minha string. 2º - No if da função compara está dando que estou comparando valores de natureza diferente. #include <iostream> #include <cstdlib> #include <conio.h> #include <string> using namespace std ; bool compara(char); //prototypes int main( void ) { char ch; printf ("Digite sua senha:\n"); scanf ("%s", &ch); getchar (); printf("\n"); if (compara( ch )){ printf("TRUE\n"); } else{ printf("FALSE\n"); } system( "PAUSE" ); return (0); } bool compara(char ch) { printf( "%s", &ch ); if ( ch == "danilo"){ return (true); } else{ return (false); } } Valeu galera!!! Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Maio 27, 2010 O erro está no conceito. O tipo de dados "String" não está definido no C padrão. Strings em C são tratadas como arrays cuja última posição armazena um 0. Pra usar arrays, você precisa de um ponteiro para a sua primeira posição, e a partir daí pode trabalhar com offsets desse endereço pra acessar os outros elementos (neste caso, letras) do array. Então, pra armazenar 10 letras, seria necessário declarar: char palavra[11]; É declarado "palavra", de 11 bytes. 11, porque, como eu disse acima, é preciso terminar a string com um 0. A partir daí, pode-se armazenar letras de palavra[0] a palavra[9] (10 letras). palavra[0] é o endereço-base do vetor. Outra coisa... como estamos trabalhando com mais de uma posição de memória, não podemos usar operadores de comparação para tratar o vetor todo (como "=="). Poderíamos comparar uma única letra dessa maneira: if(palavra[0] == 'a') // a palavra começa com a letra 'a'. { ...; } Para comparar strings inteiras, é preciso usar uma função como a strncmp() (ou a sua prima menos segura, strcmp), strcasecmp(), etc, que retornam 0 se as duas strings são idênticas (strcasecmp() não considera letras maiúsculas e minúsculas), provendo como argumentos as duas strings que se deseja comparar: if (strncmp(palavra, "carro", strlen(palavra)) == 0) // a palavra representada no vetor é "carro". Aspas duplas significam que se está representando um "vetor de caracteres terminado em 0", e toda vez que se usa aspas simples, representa-se UM caractere. Portanto, "a" é diferente de 'a'. Não se pode passar 'a' para uma função como strncmp(), porque ela espera vetores, e não caracteres, portanto cuidado com isso. O erro do if é esse. Você está tentando comparar um caractere com um vetor de caracteres terminado em 0 (uma "string"). Outra coisa: pra ler do teclado, use algo como fgets() até que você aprenda a alocar e realocar memória dinamicamente. Scanf() deve ser evitada. Falei alguma coisa sobre isso aqui. E não se preocupe. Isso é bastante informação, mas com algumas semanas de prática você se habitua aos conceitos e tudo fica mais claro. O pessoal costuma mistificar ponteiros, e pintá-los como algo muito complexo, mas é só questão de ler o manual com calma e aplicá-lo. Nada na computação acontece "por acaso". Se você não entendeu alguma coisa, posta que eu explico melhor. Não sei se fui claro o suficiente. Tenta consertar o programa, e posta aqui dizendo se conseguiu ou não. Boa sorte. Compartilhar este post Link para o post Compartilhar em outros sites
K3L3M0 0 Denunciar post Postado Maio 27, 2010 Cara, parabens, sua explicação foi simplismente, clara e objetiva, entendi exatamente tudo o que você disse, e já estou aplicando as alterações! Sou programador php, e quero ampliar minha visão em algoritimos, percebi que tenho muito o que aprender, mas com explicações como essa estou no caminho certo do sucesso!! Obrigado mesmo!! Compartilhar este post Link para o post Compartilhar em outros sites