Jump to content
Gurzi

[Resolvido] random char

Recommended Posts

Gurzi

Boas Malta

Ontem não tinha nada para fazer e para por em prática um dos poucos conhecimentos que tenho em Linguagem C , comecei a fazer apenas com funções, alguns switch/case , nada de complicado um programa com menus e com algumas paneleirisses :P

Tem o Nome de Kishiote Utilities   e está funcional mas ainda numa versão 0.00000000001 porque primeiro, não tem utilidade nenhuma (apenas serve para testar alguns conhecimentos) , depois porque nem tudo está como eu quero..

Vou testando as coisas e já descobri uns quantos erros.

A minha dúvida: : Quero gerar passwords com chars , tipo ele vai de A a Z e com 7 letras cria uma password com letras aleatórias(podem ser repetidas)

na minha mais perfeita idiotice criei isto :

void menustr()
{
  system("cls");
  titulo();
  printf("\n\t\t\t\t     @@STRINGS@@ \n");
  linha();
  printf("\n\n\t\t\t1 - Qual a Melhor Password\n");
  printf("\t\t\t2 - Criar uma Password\n");
  scanf("%d",&op);
  option_str(op);

}

void pw_rand(void)
{
int i=0;
while (i<7)
{
srand(time(NULL));
pw1[i]=  rand() % 27;
printf("%c",&pw1[i]);
i++;
}

o que não funciona  :)

já pensei que teria que ser pw1= (char) rand() % 27 ( 27 , visto que o abc tem 27 chars)

Bem vou deixar aqui por baixo o code todo, para verem o aspecto do bixo (mt básico , por isso não critiquem o nivél da bixana)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>


int op=0;
int valor=0;
int gerado=0;
char pw1[40];
char pw2[40];

void menumat(void);
void menudiv(void);
void menustr(void);
void linha(void);
void option_div(int);
void apostas(int);
void pw_rand(void);
void pw_compare(char *x,char *y);
void option(int );
void option_str(int);


int strlen(char *i)
{
  int j=0;
  for(j=0;i[j]!='\0';j++)
   return j;
}

void linha(void)
{
printf("\t\t--------------------------------------------------------\n\n");
}
void titulo(void)
{
  printf("\t\t------------------KISHIOTE UTILITIES ------------------\n");
}

void menup()
{
  system("cls");
  titulo();
  printf("\t\t|\t\t\t\t\t\t      |");
  printf("\n\t\t|\t\t1-Matematica                          |\n");
  printf("\t\t|\t\t2-Divertimento                        |\n");
  printf("\t\t|\t\t3-Funcoes de Strings                  |\n");
  printf("\t\t|\t\t4-Sair                                |\n");
  printf("\t\t|\t\t\t\t\t\t      | \n");
  printf("\t\t-------------------------------------------------------\n");
  printf("\t\t\tIntroduza a opcao que pretende(1/2/3) :\n\n\t\t\t\t\t ");
scanf("%d",&op);
option(op);

}
void option(int x)
{
switch(x)
{
   case 1 : menumat();
           break;
   case 2 : menudiv();
          break;
   case 3: menustr();
          break;
   case 4: exit(0);
           break;
   default : printf("Introduziu uma opcao errada");
             exit(0);
             break;
  }
}
void menumat()
{
  system("cls");
  titulo();
  printf("\n\t\t\t\t   @@MATEMATICA@@\n\n");
  linha();
  printf("\t\t\t\t1- Maximo Divisor Comum\t\t\t\n");
}


void menudiv()
{
  system("cls");
  titulo();
  printf("\n\t\t\t\t  @@DIVERTIMENTO@@\n\n");
  linha();
  printf("\t\t\t\t 1 - Spider\t\t\t\n");
  printf("\t\t\t\t 2 - Copas\t\t\t\n");
  printf("\t\t\t\t 3 - Apostar Numero\t\t\t\n");
  printf("\t\t\t\t 4 - Voltar ao Menu Principal\t\t\t\n");
  printf("\t\t\t\t 5 - Sair\t\t\t\n");
  putchar('\n');
  printf("\t\t\tIntroduza a opcao que pretende(1/2/3) : \n\n\t\t\t");
  scanf("%d",&op);
  option_div(op);
}
void option_div(int x)
{
  switch(x)
  {
    case 1 : system("spider.exe");
             break;
    case 2 : system("mshearts.exe");
             break;
    case 3 : system("cls");
             titulo();
             putchar('\n');
             printf("\t\t\t\t   Jogo das Apostas\n");
             linha();
             printf("\t\t\t\tIntroduza um valor \n\n\n\t\t\t\t");
             scanf("%d",&valor);
             apostas(valor);
             break;
    case 4 : menup();
             break;
    case 5 : exit(0);
             break;
  }
}

void menustr()
{
  system("cls");
  titulo();
  printf("\n\t\t\t\t     @@STRINGS@@ \n");
  linha();
  printf("\n\n\t\t\t1 - Qual a Melhor Password\n");
  printf("\t\t\t2 - Criar uma Password\n");
  scanf("%d",&op);
  option_str(op);

}
void option_str(int x)
{
  switch(x)
  {
    case 1 : printf("Introduza a password 1 que pretende comparar\n");
             fflush(stdin);
             gets(pw1);
             printf("Introduza a password 2 que pretende comparar\n");
             gets(pw2);
             pw_compare(pw1,pw2);
             break;
   case 2 : pw_rand();
            break;
  }
}
void pw_rand(void)
{
int i=0;
while (i<7)
{
srand(time(NULL));
pw1[i]=  rand() % 27;
printf("%c",&pw1[i]);
i++;
}

}
void pw_compare(char *x,char *y)
{
  int i=0;
  int j=0;
  int total_letraspw1=0;
  int total_numpw1=0;
  int total_letraspw2=0;
  int total_numpw2=0;
  for(i=strlen(x),j=0;j==i;j++)
   {
     if(x[j] >= 'A' && x[j]<='Z' || x[j] >='a' && x[j]<='z')
       total_letraspw1 +=1;
     if(x[j] >=0 && x[j]<= 9)
       total_numpw1+=1;
   }
   for(i=strlen(y),j=0;j==i;j++)
   {
     if(y[j] >= 'A' && y[j]<='Z' || y[j] >='a' && y[j]<='z')
       total_letraspw2+=1;
     if(y[j] >=0 && y[j] <= 9)
       total_numpw2+=1;
   }

}
void apostas(int x)
{
    while(x !=gerado)
    {

     if(x > gerado)
       printf("\t\t\tIntroduziste um numero maior que o suposto\n\n");
      else
       printf("\t\t\tIntroduziste um numero menor que o suposto\n\n");

    printf("\t\t\tintroduza outro numero\n\t\t\t");
    scanf("%d",&valor);
    x=valor;
   }
   printf("\t\t\tACERTOU\n");

}

main()
{

srand (time (NULL));
gerado= rand()%100;
titulo();
menup();
putchar('\n');



system("PAUSE");
}

espero uma ajuda :D :(

Share this post


Link to post
Share on other sites
Marino

Biba  :(

#include <stdio.h>
#include <time.h>


void pw_rand(void)
{
int i=0,aux;
char pw1[7];
     srand(time(NULL));
      while (i<7)
      {
      
      aux = (65 + rand() % (91-65));
      pw1[i]=(char) aux;
      printf("%c",pw1[i]);
      i++;
      printf("\n");
      }
}



int main()
{
    
    printf("Pass Criada\n");
    pw_rand();

system("PAUSE");
return 0;
} 

Ora o srand, que é a semente dos "randes" tem que estar fora do ciclo while, pois se não estava sempre a gerar a mesma semente, e os valores eram sempre iguais.

Nao inicializas-te o pw1.

Tens que ver que um inteiro corresponde a uma char da tabela ascii (http://www.lookuptables.com/) . 65 + rand() % (91-65)  cria valores de 65 até 90. que corresponde em ascii de A a Z.

engraçado era criar uma pass com letras maiusculas minusculas e numeros  🤔

Se tiver algum erro avisem, pois aquilo dos ascii fiz a olho  :)

Share this post


Link to post
Share on other sites
Gurzi

obrigado, agora estou nas aulas mas quando chegar a casa vou logo tratar disso :(

obrigado

Share this post


Link to post
Share on other sites
Gurzi

a bombar, obrigado mesmo :(

só não percebi a parte de aux = (65 + rand() % (91-65));

o porque de 65 + rand() % (91-65)

visto que vai dar um numero até 91 já que 91-65 = 26 +65 =91

Share this post


Link to post
Share on other sites
saramgsilva

a bombar, obrigado mesmo :(

só não percebi a parte de aux = (65 + rand() % (91-65));

o porque de 65 + rand() % (91-65)

visto que vai dar um numero até 91 já que 91-65 = 26 +65 =91

91-65 = 26

por tanto o resultado de rand()%26 é um dos seguintes numeros:

0,1,2,3,4,5,....,20,21,22,23,24,25

pois sao os possiveis restos da divisao do numero aleatorio por 26...

agora o aux = 65+ num_aletorio, deve ter a ver com o aux ter k ser superior ou igual a 65

para fazer aux=rand()% 91  teriamos como resultado um numero : 0,1,2,3,4,5,6,7,8,9,......,88,89,90

e parece k se ker k seja superior a 65...

espero k tenham percebido..  :)

Share this post


Link to post
Share on other sites
Marino

ascii.png

Se reparares a letra A corresponde em decimal ao numero 65, a Z ao numero 90, ou seja se eu fizer um cast  tipo: "  (char) letra = 61; "  a letra vai ser o B, assim sucessivamente.  :)

Quero ver isso a criar pass com maiúsculas minúsculas e números :P e a gravar num txt já agora  :(

Share this post


Link to post
Share on other sites
Gurzi

isso é mt advanced , o maximo que consigoo é a cena das maisuculas e minuscululas :) os files ainda n aprendi =D

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.