phdmais Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 Falta um ; (ponto-e-vírgula) depois do "float a"float a; printf("Digite a senha:\n"); scanf("%f", &a); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 Uma crítica: ao usar float pra receber senha você força o infeliz a ter senha numérica. Use string. E aproveita pra mostrar tudo como asteriscos. Seria um bom exercício. ;-) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 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í ! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 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 ) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 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. :))))) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 Mas seria interessante aprender da outra forma também, apenas para fins de estudo ! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 phdmais Postado Fevereiro 20, 2009 Autor Denunciar Share Postado Fevereiro 20, 2009 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 (editado) 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 Fevereiro 20, 2009 por Maligno Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 phdmais Postado Fevereiro 20, 2009 Autor Denunciar Share Postado Fevereiro 20, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 20, 2009 Denunciar Share Postado Fevereiro 20, 2009 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(). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 phdmais Postado Fevereiro 21, 2009 Autor Denunciar Share Postado Fevereiro 21, 2009 (editado) 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 Fevereiro 21, 2009 por phdmais Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 21, 2009 Denunciar Share Postado Fevereiro 21, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 phdmais Postado Fevereiro 21, 2009 Autor Denunciar Share Postado Fevereiro 21, 2009 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 21, 2009 Denunciar Share Postado Fevereiro 21, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 phdmais Postado Fevereiro 21, 2009 Autor Denunciar Share Postado Fevereiro 21, 2009 (editado) 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 Fevereiro 21, 2009 por phdmais Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 21, 2009 Denunciar Share Postado Fevereiro 21, 2009 (editado) 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 minhaEspero 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 Fevereiro 21, 2009 por Maligno Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 phdmais Postado Fevereiro 22, 2009 Autor Denunciar Share Postado Fevereiro 22, 2009 #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!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GabrielCardelli Postado Fevereiro 22, 2009 Denunciar Share Postado Fevereiro 22, 2009 neste caso eu acharia melhor utilizar strcmp() do que strIcmp().Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 22, 2009 Denunciar Share Postado Fevereiro 22, 2009 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(). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 phdmais Postado Fevereiro 23, 2009 Autor Denunciar Share Postado Fevereiro 23, 2009 neste caso eu acharia melhor utilizar strcmp() do que strIcmp().qual o mais leve? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 23, 2009 Denunciar Share Postado Fevereiro 23, 2009 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. :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GabrielCardelli Postado Fevereiro 23, 2009 Denunciar Share Postado Fevereiro 23, 2009 http://docentes.puc-campinas.edu.br/ceatec...mpestricmp.htmlTanto faz usar uma ou outra... É que a stricmp Não é Case Sensitive!Abraço... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Maligno Postado Fevereiro 23, 2009 Denunciar Share Postado Fevereiro 23, 2009 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.zipVários NG (o de C é o borland_turbo_c):http://pub.buzinello.com/index.php?d=./manuals/ng/ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 phdmais Postado Fevereiro 24, 2009 Autor Denunciar Share Postado Fevereiro 24, 2009 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: . Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
phdmais
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)
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
29 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.