鱼C论坛

 找回密码
 立即注册
查看: 2949|回复: 1

写那个vigener密码时遇到点问题

[复制链接]
发表于 2018-10-2 13:38:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 chinggggg 于 2018-10-2 13:39 编辑

$]FW5UW$E7]9EQ@`QQF`}NU.png

生成随机密码和输入都正常,然而输出不了加密的文本。。
主要问题应该在password这个函数。。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define letternum 26
  4. typedef char Elemtype;

  5. //字母结点
  6. typedef struct Letter
  7. {
  8.     Elemtype let;
  9.     struct Letter *next;
  10. } letter;
  11. //数字密码结点
  12. typedef struct Passwords
  13. {
  14.     int passw;
  15.     struct passwords *next;
  16. } pw;

  17. //初始化26个字母,循环链表
  18. void Init(letter **L)
  19. {
  20.     int i;
  21.     *L = (letter*)malloc(sizeof(letter));
  22.     letter *p = *L;
  23.     p->let = 65;
  24.     letter *q;
  25.     for(i = 2; i <= letternum; ++i)
  26.     {
  27.         q = (letter*)malloc(sizeof(letter));
  28.         q->let = i+64;
  29.         p->next = q;
  30.         p = q;
  31.     }
  32.     p->next = *L;
  33. }

  34. //创建密码,根据输入的字符长度,一个字符对应一个100以内的数字
  35. void random(pw **L,int n)
  36. {
  37.     pw *p,*q;
  38.     int i;
  39.     srand(time(0));
  40.     *L = (pw*)malloc(sizeof(pw));
  41.     p = *L;
  42.     p->passw = rand()%100 + 1;
  43.     p->next = NULL;
  44.     for(i = 1; i < n; ++i)
  45.     {
  46.         q = (pw*)malloc(sizeof(pw));
  47.         q->passw = rand()%100 +1;
  48.         p->next = q;
  49.         p = q;
  50.     }
  51.     p->next = NULL;
  52. }

  53. //加密文本
  54. void password(letter *L,pw *P,char *head)
  55. {
  56.     int i;
  57.     pw *a = P;
  58.     letter *x = L;

  59.     while((*head)!= '\n')                                  //检测是否输入回车
  60.     {
  61.         if((*head)!= ' ')                                          //检测是否空格(假定输入的只有空格与字母,不考虑其他符号)
  62.         {
  63.             while((x->let)!= (*head))                  //在创建的字母循环链表中找到对应的字母
  64.             {
  65.                 x = x->next;
  66.             }
  67.             for(i = 1;i <= (a->passw)%26;++i)          //根据对应密码找到明文字母的加密字母
  68.             {
  69.                 x = x->next;
  70.             }
  71.             printf("%c",x->let);                          //输出加密字母
  72.         }
  73.         else if((*head)== ' ')                                  //假如是空格则直接输出空格
  74.             printf(" ");
  75.         ++head;
  76.         a = a->next;
  77.     }
  78. }

  79. //输出每个密码
  80. void print(pw *L,int n)
  81. {
  82.     int i;
  83.     pw *p = L;
  84.     for(i = 0; i < n; ++i)
  85.     {
  86.         printf("%d ",p->passw);
  87.         p = p->next;
  88.     }
  89.     printf("\n");

  90. }

  91. int main()
  92. {
  93.     int n,i;
  94.     pw *p = NULL;
  95.     char plain[50];
  96.     letter *L = NULL;
  97.     Init(&L);

  98.     printf("输入字母:");
  99.     gets(plain);

  100.     i = strlen(plain);                                           //输入明文的长度

  101.     random(&p,i);                                          //创造出对应的密码
  102.     print(p,i);                                                  //打印出密码
  103.     password(L,p,&plain);                                  //打印加密文本
  104.     return 0;
  105. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-2 14:10:18 | 显示全部楼层
  1. 1>main.c
  2. 1>c:\visualstudioprojects\c\c\main.c(42): warning C4013: “time”未定义;假设外部返回 int
  3. 1>c:\visualstudioprojects\c\c\main.c(51): warning C4133: “=”: 从“pw *”到“passwords *”的类型不兼容
  4. 1>c:\visualstudioprojects\c\c\main.c(81): warning C4133: “=”: 从“passwords *”到“pw *”的类型不兼容
  5. 1>c:\visualstudioprojects\c\c\main.c(93): warning C4133: “=”: 从“passwords *”到“pw *”的类型不兼容
  6. 1>c:\visualstudioprojects\c\c\main.c(108): warning C4013: “gets”未定义;假设外部返回 int
  7. 1>c:\visualstudioprojects\c\c\main.c(110): warning C4013: “strlen”未定义;假设外部返回 int
  8. 1>c:\visualstudioprojects\c\c\main.c(114): warning C4047: “函数”:“char *”与“char (*)[50]”的间接级别不同
  9. 1>c:\visualstudioprojects\c\c\main.c(114): warning C4024: “password”: 形参和实参 3 的类型不同
  10. 1>c:\visualstudioprojects\c\c\main.c(101): warning C4101: “n”: 未引用的局部变量
  11. 1>C.vcxproj -> C:\VisualStudioProjects\C\Debug\C.exe
  12. 1>已完成生成项目“C.vcxproj”的操作。
  13. ========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 09:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表