写那个vigener密码时遇到点问题
本帖最后由 chinggggg 于 2018-10-2 13:39 编辑生成随机密码和输入都正常,然而输出不了加密的文本。。
主要问题应该在password这个函数。。
#include <stdio.h>
#include <stdlib.h>
#define letternum 26
typedef char Elemtype;
//字母结点
typedef struct Letter
{
Elemtype let;
struct Letter *next;
} letter;
//数字密码结点
typedef struct Passwords
{
int passw;
struct passwords *next;
} pw;
//初始化26个字母,循环链表
void Init(letter **L)
{
int i;
*L = (letter*)malloc(sizeof(letter));
letter *p = *L;
p->let = 65;
letter *q;
for(i = 2; i <= letternum; ++i)
{
q = (letter*)malloc(sizeof(letter));
q->let = i+64;
p->next = q;
p = q;
}
p->next = *L;
}
//创建密码,根据输入的字符长度,一个字符对应一个100以内的数字
void random(pw **L,int n)
{
pw *p,*q;
int i;
srand(time(0));
*L = (pw*)malloc(sizeof(pw));
p = *L;
p->passw = rand()%100 + 1;
p->next = NULL;
for(i = 1; i < n; ++i)
{
q = (pw*)malloc(sizeof(pw));
q->passw = rand()%100 +1;
p->next = q;
p = q;
}
p->next = NULL;
}
//加密文本
void password(letter *L,pw *P,char *head)
{
int i;
pw *a = P;
letter *x = L;
while((*head)!= '\n') //检测是否输入回车
{
if((*head)!= ' ') //检测是否空格(假定输入的只有空格与字母,不考虑其他符号)
{
while((x->let)!= (*head)) //在创建的字母循环链表中找到对应的字母
{
x = x->next;
}
for(i = 1;i <= (a->passw)%26;++i) //根据对应密码找到明文字母的加密字母
{
x = x->next;
}
printf("%c",x->let); //输出加密字母
}
else if((*head)== ' ') //假如是空格则直接输出空格
printf(" ");
++head;
a = a->next;
}
}
//输出每个密码
void print(pw *L,int n)
{
int i;
pw *p = L;
for(i = 0; i < n; ++i)
{
printf("%d ",p->passw);
p = p->next;
}
printf("\n");
}
int main()
{
int n,i;
pw *p = NULL;
char plain;
letter *L = NULL;
Init(&L);
printf("输入字母:");
gets(plain);
i = strlen(plain); //输入明文的长度
random(&p,i); //创造出对应的密码
print(p,i); //打印出密码
password(L,p,&plain); //打印加密文本
return 0;
}
1>main.c
1>c:\visualstudioprojects\c\c\main.c(42): warning C4013: “time”未定义;假设外部返回 int
1>c:\visualstudioprojects\c\c\main.c(51): warning C4133: “=”: 从“pw *”到“passwords *”的类型不兼容
1>c:\visualstudioprojects\c\c\main.c(81): warning C4133: “=”: 从“passwords *”到“pw *”的类型不兼容
1>c:\visualstudioprojects\c\c\main.c(93): warning C4133: “=”: 从“passwords *”到“pw *”的类型不兼容
1>c:\visualstudioprojects\c\c\main.c(108): warning C4013: “gets”未定义;假设外部返回 int
1>c:\visualstudioprojects\c\c\main.c(110): warning C4013: “strlen”未定义;假设外部返回 int
1>c:\visualstudioprojects\c\c\main.c(114): warning C4047: “函数”:“char *”与“char (*)”的间接级别不同
1>c:\visualstudioprojects\c\c\main.c(114): warning C4024: “password”: 形参和实参 3 的类型不同
1>c:\visualstudioprojects\c\c\main.c(101): warning C4101: “n”: 未引用的局部变量
1>C.vcxproj -> C:\VisualStudioProjects\C\Debug\C.exe
1>已完成生成项目“C.vcxproj”的操作。
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
页:
[1]