求大神指教!!!vigenere密码程序无法输出结果

weixin_38265602 2017-04-11 10:05:42
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

void Encry()
{
char key[100];
char ch, temp;
int L, i = 0, j = 0;
if (getchar() == '\n')
temp = ' ';
printf("请输入密钥:");
gets_s(key,100);
L = strlen(key);

printf("请输入明文:");

while ((ch = getchar()) != '\n')
{
if (ch = ' ')
{
i++;
continue;
}
if (ch >= 'a'&&ch <= 'z')
{
printf("%c", (ch + key[j%L] - 'a' - 'a') % 26 + 'A');
j++;
}
if (ch >= 'A'&&ch <= 'Z')
{
printf("%c", (ch + key[j%L] - 'a' - 'A') % 26 + 'A');
j++;
}
if (j%L == 0)
printf(" ");
i++;
}
putchar(ch);
}

void Decry()
{
char key[100];
char ch, temp;
int L, i = 0, j = 0;
if (getchar() == '\n')
temp = ' ';
printf("请输入密钥:");
gets_s(key,100);
L = strlen(key);

printf("请输入密文:");

while ((ch = getchar())!= '\n')
{
if (ch == ' ')
{
i++;
continue;
}
if (ch >= 'A'&&ch <= 'Z')
{
printf("%c", (ch - key[j%L] - 'A' + 'a' + 26) % 26 + 'a');
j++;
}
if (j%L == 0)
printf("");
i++;
}
putchar(ch);
}

int Exit()
{
exit(0);
}

int main()
{
char ch;
for (;;)
{
printf("请输入操作 e:加密 d:解密 q:退出 ");
ch = getchar();
if (ch == 'e' || ch == 'E')
Encry();
else if (ch == 'd' || ch == 'D')
Decry();
else if (ch == 'q' || ch == 'Q')
Exit();
else
{
printf("输入命令错误");
putchar(getchar());
continue;
}
}
return 0;
}
...全文
91 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-04-11
  • 打赏
  • 举报
回复
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

void Encry()
{
    char key[100];
    char ch, temp;
    int L, i = 0, j = 0;
    if (getchar() == '\n')
        temp = ' ';
    printf("请输入密钥:");
    gets_s(key,100);
    //gets(key);
    L = strlen(key);

    printf("请输入明文:");

    while ((ch = getchar()) != '\n')
    {
        if (ch == ' ')
        {
            i++;
            continue;
        }
        if (ch >= 'a'&&ch <= 'z')
        {
            printf("%c", (ch + key[j%L] - 'a' - 'a') % 26 + 'A');
            j++;
        }
        if (ch >= 'A'&&ch <= 'Z')
        {
            printf("%c", (ch + key[j%L] - 'a' - 'A') % 26 + 'A');
            j++;
        }
        if (j%L == 0)
            printf(" ");
        i++;
    }
    putchar(ch);
}

void Decry()
{
    char key[100];
    char ch, temp;
    int L, i = 0, j = 0;
    if (getchar() == '\n')
        temp = ' ';
    printf("请输入密钥:");
    gets_s(key,100);
    //gets(key);
    L = strlen(key);

    printf("请输入密文:");

    while ((ch = getchar())!= '\n')
    {
        if (ch == ' ')    /*此处不是赋值,而是判断 == */
        {
            i++;
            continue;
        }
        if (ch >= 'A'&&ch <= 'Z')
        {
            printf("%c", (ch - key[j%L] - 'A' + 'a' + 26) % 26 + 'a');
            j++;
        }
        if (j%L == 0)
            printf("");
        i++;
    }
    putchar(ch);
}

int Exit()
{
    exit(0);
}

int main()
{
    char ch;
    for (;;)
    {
        printf("请输入操作  e:加密 d:解密 q:退出 ");
        ch = getchar();
        if (ch == 'e' || ch == 'E')
            Encry();
        else if (ch == 'd' || ch == 'D')
            Decry();
        else if (ch == 'q' || ch == 'Q')
            Exit();
        else
        {
            printf("输入命令错误");
            putchar(getchar());
            continue;
        }
    }
    return 0;
}
有一处问题,比较容易出错误。详见代码注释;
赵4老师 2017-04-11
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧