黑马程序员技术交流社区

标题: 利用随机数函数,生成随机密码,每天一贴,天天进步 [打印本页]

作者: 吴伟健    时间: 2015-4-12 12:14
标题: 利用随机数函数,生成随机密码,每天一贴,天天进步
10点起床,好久没这么晚起床了,吃了个早中饭,闲来无事,看板块有讨论随机数函数,突发奇想,做了一个随机密码生成程序
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(int argc, const char * argv[]) {
  4.     //请输入想生成多少个随机密码
  5.    
  6.     //用循环限制得到用户想要的密码个数
  7.     int i=0;
  8.     while (i<=0) {
  9.         printf("请输入想生成多少个随机密码:\n");
  10.         scanf("%d",&i);
  11.     }
  12.    
  13.     for (int n = 0; n<i; n++) {
  14.         char  num1=arc4random_uniform(26)+65;  //利用随机数生成数字,然后字符形式输出
  15.         char  num2=arc4random_uniform(26)+65;
  16.         char  num3=arc4random_uniform(26)+65;
  17.         char  num4=arc4random_uniform(26)+97;
  18.         char  num5=arc4random_uniform(26)+97;
  19.         char  num6=arc4random_uniform(26)+97;
  20.         char  num7=arc4random_uniform(10);     //密码最后两位数字
  21.         char  num8=arc4random_uniform(10);
  22.         printf("%c%c%c%c%c%c%d%d\n",num1,num2,num3,num4,num5,num6,num7,num8);
  23.     }
  24.    
  25.     return 0;
  26. }
复制代码



但是我不知道怎么把生成的密码排序在随机化,希望哪位朋友能帮忙一下,即如果我得到生成密码ABCabc11,在把这个密码随机排序,希望得到指点,另外版主没上班吗?求加技术分啊
作者: 吴伟健    时间: 2015-4-12 12:18
另外发了贴才发现,我定义变量是num7 num8是char,输出的时候是%d,但是没有警告也没有报错,求解下
作者: 吴伟健    时间: 2015-4-12 12:24
吴伟健 发表于 2015-4-12 12:18
另外发了贴才发现,我定义变量是num7 num8是char,输出的时候是%d,但是没有警告也没有报错,求解下 ...
  1. int main(int argc, const char * argv[]) {
  2.     //请输入想生成多少个随机密码
  3.    
  4.     //用循环限制得到用户想要的密码个数
  5.     int i=0;
  6.     while (i<=0) {
  7.         printf("请输入想生成多少个随机密码:\n");
  8.         scanf("%d",&i);
  9.     }
  10.    
  11.     for (int n = 0; n<i; n++) {
  12.         char  num1=(arc4random_uniform(26)+65)/2;  //利用随机数生成数字,然后字符形式输出
  13.         char  num2=arc4random_uniform(26)+65;
  14.         char  num3=arc4random_uniform(26)+65;
  15.         char  num4=arc4random_uniform(26)+97;
  16.         char  num5=arc4random_uniform(26)+97;
  17.         char  num6=arc4random_uniform(26)+97;
  18.         int  num7=(arc4random_uniform(100))/2;     //密码最后两位数字
  19.         int  num8=arc4random_uniform(10);
  20.         printf("%c%c%c%c%c%c%d%d\n",num1,num2,num3,num4,num5,num6,num7,num8);
  21.     }
  22.    
  23.     return 0;
  24. }
复制代码


做了点修改,将得到的随机数进行运算,最后对数字进行运算,可以起到密码随机位数的作用
作者: 毛大鹏    时间: 2015-4-12 12:38
关于上面问题,是系统做了一个隐形转换,把char类型根据ascii码转成int类型了吧
作者: 吴伟健    时间: 2015-4-12 12:41
噢,谢谢,那生成的密码再随机排序,这个应该怎么做呢?
作者: tyisbest    时间: 2015-4-12 12:42
赞一个.不错
作者: 花短裤的夏天    时间: 2015-4-12 12:49
太赞了,我还是太弱了,向大神学习!!!
作者: 举举手    时间: 2015-4-12 13:00
回来再看,先留下言
作者: 耿小强    时间: 2015-4-12 14:18
非常不错,再接再厉
作者: 糊涂娃    时间: 2015-4-12 14:38
我靠 nb…
作者: kaiyan1208    时间: 2015-4-12 22:20
这个研究了一下 主要是你思考的方向不对
看看我写的给你参考一下
  1. //
  2. //  main.c
  3. //  13-生成随机密码
  4. //
  5. //  Created by apple on 15/4/12.
  6. //  Copyright (c) 2015年 zky. All rights reserved.
  7. /*

  8. 根据用户的输入的位数,输出大小字母加数字的密码
  9. */

  10. #include <stdio.h>
  11. #include <stdlib.h>

  12. int main(int argc, const char * argv[])
  13. {
  14.     //定义变量保存位数
  15.     int n=0;
  16.     char c1 = '\0';
  17.     // 提示输入需要生成密码的位数
  18.     while (n<=0){
  19.         printf("请输入需要生成密码的位数:\n");
  20.         scanf("%d",&n);      //接收位数
  21.     }
  22.    
  23.     //输出密码
  24.     for (int i=0;i<n;i++)
  25.     {
  26.         switch (arc4random_uniform(3)+1){
  27.             case 1 : c1=arc4random_uniform(26)+65;  break;
  28.             case 2 : c1=arc4random_uniform(26)+97;  break;
  29.             case 3 : c1=arc4random_uniform(10)+48;  break;
  30.         }
  31.        printf("%c",c1);
  32.     }
  33.    
  34.     printf("\n");
  35.     return 0;
  36. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2