凯撒密码(c语言)vs2017

hxy 2019-12-12 AM 145℃ 0条 访问: 146 次

用的是vs2017编译的,其它的编译器sanf_s,gets_s报错 换成scanf,gets就行。

添加了把大小写字母统一转化为小写字母

进行了防越界处理

添加输入非大小写字符,跳到重新输入明文

添加非法字符在无论在字符串位置,都可以识别

代码:

 #include <stdio.h>
#include <string.h>
#include <windows.h>
#include<stdlib.h>
int g( char*);
int main()
{
    char b[25] = { 0 };
    int n,i;
    int m = 0;
    int o = 2;
    printf("请输入移位数的值:");
    scanf_s("%d", &n);//如果报错 请用scanf函数
    getchar();    //去掉空格
    while (o == 2)
    {
        printf("请输入明文:");
        gets_s(b);
        //getchar();    //去掉空格
        int s;
        s = g(b);  //获取密钥的长度
        for (i = 0;i<s; i++)    
        {
            //把大写字母转化为小写字母
            if (b[i] >= 'A' && b[i] <= 'Z')
            {
                b[i] += 32;
            }
            //进行了防越界处理
            if (b[i] >= 'a' && b[i] <= 'z')
            {
                b[i] = ((b[i] - 'a') + n) % 26 + 'a';
                o = 3;
            }
            if (b[i] < 'A' || b[i] > 'z')
            {
                printf("该程序仅支持大小写字母\n");
                printf("请重新输入\n");
                Sleep(1000);//延迟1s
                system("cls");//清屏
                //错误字符无论在什么位置都可以识别
                o = 2;
                break;
            }
        }
        if(o==3)
        {
            printf("密钥:");
            for (i = 0; i <s; i++)
            {
                printf("%c", b[i]);
            }
        }
    }
    
    getchar();
    return 0;
}

//获取密钥长度函数
int g( char *str)
{    
    int count = 0;
    while (*str != '\0')
    {
        count++;
        str++;
    }
    return count;
}
标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~