probleme avec ASCIi

probleme avec ASCIi - C - Programmation

Marsh Posté le 08-06-2005 à 17:07:28    

salut a tous,
 
je suis sur un programme qui genere un mot de passe mais g dois seulement utiliser les caractere compri entre 48 et 122 (en decimal) que je transcri en ASCII.
Le probleme c'est que je ne dois pas avoir de signe cabalistiques a l'arrivé dans mon mot de passe genere!
comment faire??
 
je vous passe le code me permettant de creer mon mot de passe
 

Code :
  1. void genpsswd (int longueur,char *pass)
  2. {
  3. int i;
  4. srandom(getpid());
  5. for (i=0;i<longueur;i++)
  6. {
  7.  pass[i]=(48+(random()  % 74));         //modif a faire ici  
  8. }
  9. }

Reply

Marsh Posté le 08-06-2005 à 17:07:28   

Reply

Marsh Posté le 08-06-2005 à 17:26:47    

Bon déjà, il vaut mieux utiliser srand, rand (et les utiliser correctement) mais autrement pour ton problème, une solution simple serait de tester si la valeur est alphanumérique (avec isalnum déclarée dans ctype.h par exemple) et de rechercher une autre valeur si ce n'est pas le cas.

Reply

Marsh Posté le 08-06-2005 à 17:29:54    

ba j'ai tester rand et srand il genere moins ien aleatoiremen je trouve mais enfin.Et pourquoi je l'utilise par corectement la ???

Reply

Marsh Posté le 08-06-2005 à 17:36:48    

Tiré du man :
 

Si vous voulez générer un nombre aléatoire entre 1 et 10, vous devriez toujours faire
 
      j=1+(int) (10.0*rand()/(RAND_MAX+1.0));
 
Et jamais quelque chose ressemblant à
 
      j=1+(rand() % 10);


Message édité par Tarabiscote le 08-06-2005 à 17:39:09
Reply

Marsh Posté le 08-06-2005 à 18:53:39    

si ta bien lut on peut utiliser les 2 facons mais ca depend d'un critere et la ca marche tres bien dans mon cas avec la 2eme facon

Reply

Marsh Posté le 09-06-2005 à 08:50:16    

Mais ca change pas le probleme j'arrive toujours pas a avoir les chiffre et les lettres seulment

Reply

Marsh Posté le 09-06-2005 à 10:11:23    

shikra a écrit :

Mais ca change pas le probleme j'arrive toujours pas a avoir les chiffre et les lettres seulment


Tu fais des choses trop compliquées...
C'est ça que tu veux ?


jr83mZT6
56O7Cp11
h85rG3f2
rrbG55k9
Ny2c5O92
KbRg20bm
968uk1WO
8N08286A
I2Sr769O
52Rd8452


 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void make_pwd (char *s, size_t n)
{
   static const char a[] =
   "0123456789"
   "0123456789"
   "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
   "0123456789"
   "0123456789"
   "abcdefghijklmnopqrstuvwxyz";
 
   size_t i;
 
   for (i = 0; i < n; i++)
   {
      /* methode naive.  
       * Il existe des methodes plus elaborees si necessaire...  
       * lire la FAQ de fr.comp.lang.c
       */
      s[i] = a[rand () % (sizeof a - 1)];
   }
   s[i] = 0;
}
 
int main (void)
{
 
   srand ((unsigned) time (NULL));
 
   {
      int i;
 
      for (i = 0; i < 10; i++)
      {
         char pwd[8+1];
         make_pwd (pwd, sizeof pwd - 1);
         printf ("%s\n", pwd);
      }
   }
 
   return 0;
}



Message édité par Emmanuel Delahaye le 09-06-2005 à 10:18:45

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-06-2005 à 10:13:36    

peut etre que c'est complique mais c'est pour mon stage il me demande de le faire en C sachant que j'en ai jamai fait mais que j'ai fait que du C++ cette annéé
Comment faire pour prendre les chiffres et les lettres alor??

Reply

Marsh Posté le 09-06-2005 à 10:14:30    

merci emmanuel gavai un bug et je voyai rien

Reply

Marsh Posté le 09-06-2005 à 11:26:13    

merci a tous j'ai reussi e finir ce petit programme!je vous laisse mon code si ca peut vous interesser:
 

Code :
  1. #include <signal.h>
  2. #include <sys/types.h>
  3. #include <unistd.h>
  4. #include <stdio.h>
  5. #include <ctype.h>
  6. #include <stdlib.h>
  7. void genpsswd (int longueur,char *pass)
  8. {
  9. int i;
  10. char tableau[]={'1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','K','R','S','T','U','V','W','X','Y','Z'};
  11. srandom(getpid());
  12. for (i=0;i<longueur;i++)
  13. {
  14.  pass[i]=tableau[random()  % 61];
  15. }
  16. }
  17. main (int argc,char *argv[])
  18. {
  19. int aflag=0,bflag=0,index,c;
  20. char *cvalue=NULL;
  21. opterr=0;
  22. char password[30]={0};  //initialise le tableau a zero
  23. int i;
  24. srandom (getpid ());
  25. //si pas de parametre, mot de passe a 8 caracteres
  26. if (argc <3)
  27. {
  28.  genpsswd(8,password);
  29.  printf ("%s",password);
  30.  printf ("\n" );
  31. }
  32. while ((c=getopt (argc,argv,"l:" ))!=-1)
  33. switch (c)
  34. {
  35.  case 'l':  //si option l
  36.   aflag=1;
  37.  if (argc ==3)  //et nombre en 3eme parametres
  38.  {
  39.   genpsswd(atoi(argv[2]),password);
  40.   printf ("%s",password);  //on genere et affiche un mot de passe de n caracteres
  41.   printf ("\n" );
  42.  }
  43.   break;
  44.  case '?':  //si mauvais parametre,
  45.   if (isprint (optopt))
  46.   {
  47.    fprintf (stderr,"Unknown option '-%c'.\n",optopt);  //on affiche a cause d'un parametre inconnu
  48.   }
  49.   else
  50.   {
  51.    fprintf (stderr,"Unknown option character '\\x%x'.\n",optopt);  //on affiche a cause d'une option inconnue
  52.   }
  53.  return 1;
  54. }
  55. return 0;
  56. }


a plus et bonne continuation :hello:

Reply

Marsh Posté le 09-06-2005 à 11:26:13   

Reply

Marsh Posté le 09-06-2005 à 11:46:42    

Hesitez pas a me donner votre avis

Reply

Marsh Posté le 09-06-2005 à 13:01:24    

shikra a écrit :

Hesitez pas a me donner votre avis


Pas de lignes de + de 80 colonnes, please.  
La répartion des chiffres est défavorable. (je l'avais équilibrée à la barbare).


Message édité par Emmanuel Delahaye le 09-06-2005 à 13:01:41

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 09-06-2005 à 13:19:44    

La répartion des chiffres est défavorable. (je l'avais équilibrée à la barbare).
 
????pourqoui elle est defavorable.Il n'y pas pas de reel repartition les chiffres et les lettres etant prises au hasard pas besoinde repartition

Reply

Marsh Posté le 09-06-2005 à 13:46:28    

shikra a écrit :

La répartion des chiffres est défavorable. (je l'avais équilibrée à la barbare).
 
????pourqoui elle est defavorable.Il n'y pas pas de reel repartition les chiffres et les lettres etant prises au hasard pas besoinde repartition


9 chiffres pour 52 lettres... Si ça te convient...


Message édité par Emmanuel Delahaye le 10-06-2005 à 08:16:32

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 10-06-2005 à 07:50:47    

ca convient a mon maitre de stage en tout cas

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed