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

Erro de compilação


phdmais

Pergunta

Gente o meu compilador(Finalmete consegui instalar o Dev-C++!!! peguei do meu amigo!!!!) ta falando que tem erro nessas linhas do meu programa olha:

(vou por so as linhas que interressam)

float a
          
          printf("Digite a senha:\n");
          scanf("%f", &a);

Tem erro algum nisso?

na linha do printf e do scanf, ele fala que tem erro ali, eu não achei erro nenhum.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Também é possível colocar o usuário pra escrever a senha em hexadecimal !

Gastaria menos memória em relação a string e é uma opção bem interessante, principalmente para aprendizado !

Tente fazer das duas formas !

As duas opções são boas !

Se tiver alguma dúvida posta aí !

Link para o comentário
Compartilhar em outros sites

  • 0
Também é possível colocar o usuário pra escrever a senha em hexadecimal !

Isso foi sério? Não sei se entendi. :\

Legal seria se o OP raciocinasse como seria um bom sistema de desenvolvimento em modo console. Já começaria com a base da programação, como uma função de impressão com posicionamento, uma função de impressão de quadros, linhas, etc. Só a parte de edição de texto (algo decente, claro) já daria tanto trabalho que o aprendizado seria muito mais proveitoso.

Link para o comentário
Compartilhar em outros sites

  • 0
Isso foi sério? Não sei se entendi. :\

Sim !

Você pede para o cara escrever um "texto" (na verdade é um número) com números de 0 a 9 e letras de "A" a "F" e depois salva em um unsigned long int !

É uma opção interessante !

O número máximo em decimal para um unsigned long int é 4.294.967.296, o que representa 100.000.000 em hexadecimal (o número tem nove algarismos, mas para evitar erros, como por exemplo o cara digitar FFFFFFFFF você limita a oito )

Link para o comentário
Compartilhar em outros sites

  • 0

Captei! :)

Mas não gostei. :(

Já que o OP está se dispondo a fazer uma entrada de senha, acho eu que melhor seria se fosse algo o mais próximo possível da vida real. Um texto simples de, digamos, 15 caracteres, para a entrada de uma senha. Com os devidos asteríscos, claro. Depois ele calcula o MD5 disso. :)))))

Link para o comentário
Compartilhar em outros sites

  • 0

Gostei das duas idéias!!! eu vou acabar fazendo um programa com uma senha so, acho que eu vou fazer primeiro o com numeros decimais para estudar... e depois vou fazer com caracters.... mas de uma maneira que o usuário escolhe a senha na primeira visita que tiver no prorama, já nas outras visitas não da mais para mudar as senhas, mas.... como eu coloco o negocio dos asteriscos?

Link para o comentário
Compartilhar em outros sites

  • 0
Mas seria interessante aprender da outra forma também, apenas para fins de estudo !

Me lembrei de um livro que li no tempo do guaraná de rolha (final dos anos 80). Era do Peter Norton. Acho que o nome era "Assembly 8088". O caso de estudo era um visor de arquivos apenas no modo hexadecimal. Programa simples de tudo. Mas era Assembly. Já viu, né? Você não tem piçiroca nenhuma pronta. E o que ele disse no livro sobre essa carência é bem interessante. Partindo do zero, sem nada pronto que ajude a montar algo que seja minimamente decente, você terá de fazer tudo, desde um simples posicionamento de cursor, até uma entrada de dados mais sofisticada. Mas quando tiver esse simples programa pronto, você terá passado por um leque imenso de conhecimentos, já que todos os aspectos da linguagem serão explorados. Por isso que sugeri montar essa base em C, que é extremamente mais fácil que Assembly.

Mas o que você também sugeriu é válido, claro. Qualquer coisa, pra quem não tem nada, tem muito valor.

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

  • 0

Gente eu to tentando fazer o codigo o mais simples possivel, olha s como ele esta:

{
          char s[15];
     
     printf("Digite a senha:/n");
     gets(s);
     if(s==senha) <--- Esta linh ta com erro, eu não acho....
     printf("Senha correta");
     else
     printf("Senha incorreta");
     system("pause");
     return 0;
     }

como podem ver, eu estou com um erro ali no if, terminando isso eu termino a senha do modo de string, depois eu vou fazer em hexadecimal!!!!

Se puderem me ajudar.... por favor ajudem.

Link para o comentário
Compartilhar em outros sites

  • 0

Você não pode fazer comparações desse tipo em C. Aí você está comparando o valor de um ponteiro com alguma coisa qualquer chamada "senha", que nem foi definida. Para comparar duas strings, utilize uma função da biblioteca padrão chamada stricmp(), que especial compara sem levar em conta se é caixa alta ou baixa. Ou, se quiser diferenciar, use strcmp().

Link para o comentário
Compartilhar em outros sites

  • 0
Você não pode fazer comparações desse tipo em C. Aí você está comparando o valor de um ponteiro com alguma coisa qualquer chamada "senha", que nem foi definida. Para comparar duas strings, utilize uma função da biblioteca padrão chamada stricmp(), que especial compara sem levar em conta se é caixa alta ou baixa. Ou, se quiser diferenciar, use strcmp().

Como assim? eu usei o comando IF para caso o valor da string S seja Senha, execute o comando "printf("Senha correta");" mas o que está dizendo é que o comando IF-Else não pode ser usado para verificar o valor de uma string?

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

  • 0
o que está dizeno é que o comando IF-Else não pode ser usado para verificar o valor de uma string?

Não da forma direta como você pretende. É preciso usar uma função apropriada para comparar as duas strings. Você pode testar apenas o resultado dessa comparação.

Link para o comentário
Compartilhar em outros sites

  • 0
Não da forma direta como você pretende. É preciso usar uma função apropriada para comparar as duas strings. Você pode testar apenas o resultado dessa comparação.

Mas não da para eu comparar apenas o valor da string, para economizar memória?

porque se eu criar outra string eu vou gastar 6 bytes a mais(se eu não me engano... 5 do valor "senha" e mais 1 da string)

Compensa?

Link para o comentário
Compartilhar em outros sites

  • 0
porque se eu criar outra string eu vou gastar 6 bytes a mais(se eu não me engano... 5 do valor "senha" e mais 1 da string)

Mas que drama pra gastar memória. A memória que se exploda. Não é bom desperdiçar, claro. Mas se precisa usar, simplesmente use. É assim que funciona. Mão-de-vaca!!! :)))

Compensa?

Não é nem questão de compensar ou não. Isso não é opcional. É mandatório. E é do jeitinho que eu disse. Você precisa, primeiro, definir essa tal "senha", provavelmente como uma constante. Depois use no teste uma função de comparação dessa tal "senha" e o valor que usuário digitar.

Detalhe: regra para string ASCIIZ: o tamanho total é igual o tamanho do texto mais 1 byte pro terminador nulo. Como C é uma linguagem de nível médio, não é feita qualquer checagem de tamanho. Se você errar nisso, seu programa vai dar pau sem aviso prévio. E às vezes será muito difícil encontrar a origem do erro.

Link para o comentário
Compartilhar em outros sites

  • 0

Depois use no teste uma função de comparação dessa tal "senha" e o valor que usuário digitar.

olha so, eu fiz isso, olha so meu codigo como tá:

tem uns erros... me ajuda a consertá-los? vou colocar la as linhas que estão com erro.

#include<stdio.h>
#include<stdlib.h>
#define NUL '/0'
int main()

{
    static void senha() //Linha com erro.
    char a1[15]="senha";
    static int resul=strcmp(a1,n); //Erro aki tambem.
     {
          char s1[15];
     printf("Digite a senha:/n");
     gets(s1);
     ep1=senha(s1); //E aki tambem tem erro.
     if(resul=0)
    printf("Senha correta");
    else if(resul<0)
    printf("Senha incorreta");
    else
    printf("Senha incorreta");
     }
}

Você precisa, primeiro, definir essa tal "senha", provavelmente como uma constante.

bem, eu a defini como uma outra string, mas constante gasta menos memoria?(é... mão-de-vaca é uma caracteristica minha :P)

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

  • 0

Você está fazendo a maior confusão. Parece que você quer definir uma função senha(). Não existe isso. E se fosse pra fazer isso seria FORA de main() e não dentro dela. Aí está a origem de todos os erros. Vou te dar uma forcinha:

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

int main() {
    char a1[] = "senha";
    char s1[15];

    printf("Digite a senha: ");
    gets(s1);
    
    if (stricmp(a1,s1)==0)
        printf("Senha correta\n");
    else
        printf("Senha incorreta\n");
}

Isso deve funcionar. O #include <string.h> é necessário para informar o compilador sobre a função stricmp(). Detalhe, quando for definir uma string constante, não precisa alocar pra ela mais espaço do que ela ocupa. E como é uma string, não precisa nem informar o tamanho. O compilador saberá quanto deverá alocar de espaço. Por isso ai é definido como char a1[].

Mas observe a seqüência do código que é executado. Compare com o que você fez e veja que ficou até bem mais fácil.

bem, eu a defini como uma outra string, mas constante gasta menos memoria?(é... mão-de-vaca é uma caracteristica minha

Espero que não seja mão-de-vaca na hora de pagar uma gelada pros amigos. :))))

Não, constante é apenas um valor qualquer, supostamente "imexível". Ocupa o que tem de ocupar de memória, como se fosse uma variável. Aliás, mais correto seria se as constantes fossem definidas com a cláusula const. No seu caso seria const char a1[] = "senha";. Com essa cláusula, se no decorrer da compilação for encontrado código que tente alterar a1, o compilador já emitirá um erro.

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

  • 0
#include<stdio.h>
#include<string.h>

int main() {
    char a1[] = "senha";
    char s1[15];

    printf("Digite a senha: ");
    gets(s1);
    
    if (stricmp(a1,s1)==0)
        printf("Senha correta\n");
    else
        printf("Senha incorreta\n");
}

Uau!!! você fez tudo tão rapido e fácil.... tenho mesmo muito que aprender!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Se a intenção é apenas aprender, tanto faz. Uma das coisas mais chatas em senha, e agora olhando o lado prático, é quando se tira do usuário a liberdade de compor sua senha na caixa que quiser. Particularmente, eu sempre deixo isso livre e transformo tudo para caixa baixa. Daí, mais uma vez: tanto faz. Mas muita gente faz questão de manter esse padrão ridículo que diferencia maiúsculas de minúsculas. Aí sim, faz diferença e seria necessário usar strcmp().

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que uma de suas menores preocupações é quanto tempo de CPU esta ou aquela função irá consumir. No presente contexto, isso é um dado irrelevante. Tal preocupação é válida apenas em algumas ocasiões, onde o tempo de processamente é realmente crítico. E você está longe disso.

Mas a resposta é: não sei. :)

Link para o comentário
Compartilhar em outros sites

  • 0

Pra um help simples, só com protótipo, descrição e um exemplo simples, eu prefiro usar o NG (Norton Guides). É bem prático, pra quem precisa disso o tempo todo de forma rápida. É só configurar um atalho. Pra quem quiser:

O programa leitor (não precisa instalar - é só executar):

http://pub.buzinello.com/tools/weg_expert_...ows_v1.0.15.zip

Vários NG (o de C é o borland_turbo_c):

http://pub.buzinello.com/index.php?d=./manuals/ng/

Link para o comentário
Compartilhar em outros sites

  • 0
Acho que uma de suas menores preocupações é quanto tempo de CPU esta ou aquela função irá consumir. No presente contexto, isso é um dado irrelevante. Tal preocupação é válida apenas em algumas ocasiões, onde o tempo de processamente é realmente crítico. E você está longe disso.

Mas a resposta é: não sei. :)

Bem, então você aca que eu presciso gastar mais memoria para deixar meu programa mais rapido?Olha, eu andei estudando um pouco mais e vi um tipo de classe de armazenamento, o "register", ele salva a variável/função bem nos registradores do proscessador, antes eu pensava que isso era inutil, mas depois, estudei um pouco sobre o proscessador e vi que isso pode deixar a execução da variavel/função mais rápida!!! porém, tenho ainda que fazer um teste para ver se usa uma porcentagem da CPU maior, porque se usar, pode acabar fazendo os computadores travarem ou alguns proscessos ficarem sem resposta, e acabar sendo finalizados, mas isso so se a pessoa for como eu, abrra um monte de janelas...

Segue a baixo meu codigo de teste:

#include<stdio.h>

(register) main() /*Nessa linha eu vou experimentar com e sem o register*/
{
             (register) double a, b, c, d, e, f; /*Nessa linha eu irei experimentar ocm e sem o register*/
             for(a=0,b=0,c=0,e=0,f=0;a<=35000.45,b<=36000.45,c<=36000.45,d<=36000.45,e<=36000.45,f<=36000.45;a+=1,b-=1,c+=2,d-=2,e+=3,f,-=3)
             printf("a=%f,b=%f,c=%f,d=%f,e=%f,f=%f," a, b, c, d, e, f, g, h, i, j);
             system("pause");
}

Código para quebrar o proscessador do PC hein!!!, hehehe, amenos que o seu processador não seja o Celeron inside da intel.... :angry: .

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,7k
×
×
  • Criar Novo...