一个简单的凯撒加密解密程序的fgets函数用法注意
来源:互联网 发布:淘宝数据包怎么上传 编辑:程序博客网 时间:2024/05/29 02:24
#include <stdio.h>#include <string.h>#include <malloc.h>#define CRYPT_OK 1#define CRYPT_ERROR 0enum CRYPT_TYPE {ENCRYPT, DECRYPT};int i,k;char sequenceBuf[1024];char * sequenceSrc = NULL;char * sequenceDst = NULL;int length;int encrypt(){printf("Please input your SourceString:\n");fflush(stdin);//清空输入缓冲区fgets(sequenceBuf, sizeof(sequenceBuf), stdin);printf("Please input your keyNum:\n");scanf("%d",&k);length = strlen(sequenceBuf);sequenceSrc = (char *)malloc(length * sizeof(char));for (i = 0; i < length - 1; i++)sequenceSrc[i] = sequenceBuf[i];sequenceSrc[length - 1] = '\0';//字符串结束符sequenceDst = (char *)malloc(length * sizeof(char));for (i = 0; i < length - 1; i++)sequenceDst[i]= 'a' + (sequenceSrc[i]-'a' + k)%26;sequenceDst[length - 1]='\0';return CRYPT_OK;}int decrypt(){printf("Please input your SourceString:\n");fflush(stdin);fgets(sequenceBuf, sizeof(sequenceBuf), stdin);printf("Please input your keyNum:\n");scanf("%d",&k);length = strlen(sequenceBuf);sequenceSrc = (char *)malloc(length * sizeof(char));for (i = 0; i < length - 1; i++)sequenceSrc[i] = sequenceBuf[i];sequenceSrc[length - 1] = '\0';sequenceDst = (char *)malloc(length * sizeof(char));for (i = 0; i < length - 1; i++) {sequenceDst[i]= 'a' + (sequenceSrc[i]-'a' + 26 - k)%26;}sequenceDst[length - 1]='\0';return CRYPT_OK;}int main(){int choice = -1;int result = 0;printf("Encrypt:please input 0\nDecrypt:please input 1\nPlease choose:");scanf("%d", &choice);switch (choice){case ENCRYPT : result = encrypt();break;case DECRYPT :result = decrypt();break;default:printf("输入不合法\n");break;}if (result){printf("sequenceSrc:%s\n",sequenceSrc);printf("sequenceDst:%s\n",sequenceDst);}return 0;}
在加密解密函数中,当调用fgets函数前都执行了fflush(stdin);操作,此函数是为了清空输入缓冲区。
当连续从控制台读取数据时,前一个阶段输入的数据没有使用的缓冲会影响到下一个阶段的接收。
此例中主函数scanf函数接收一个整型,当回车表示结束时,整数被choice接收,但回车换行符还在缓冲区内。恰好fgets函数是以换行符为结束标志的,所以当进入子函数时,如果没有清空缓冲区,该条语句会快速被迫执行。反应到控制台上,似乎该条语句没执行,所以需要fflush清空缓冲区。
- 一个简单的凯撒加密解密程序的fgets函数用法注意
- 一个简单的加密和解密程序——凯撒密码
- 凯撒密码--简单的加密与解密
- 一个简单的加密解密程序
- PYQT5+python3.6+QT编写一个带ui的加密解密小程序<凯撒加密><维吉尼亚加密><仿射加密><培根加密>
- 凯撒密码,简单的加密
- 个人写的凯撒密码,加密解密
- 简单的加密,解密程序
- 关于fgets()函数的一个简单问题
- fgets函数的用法
- 一个简单的C++加密,解密文件程序
- C++/Qt中一个简单的加密解密程序
- 一个简单的解密程序
- 凯撒加密与解密及其python代码的实现
- java小项目,凯撒加密与解密的实现
- Python实现凯撒密码的加密与解密
- MFC 简单的加密解密 小程序
- 凯撒密码,凯撒加密解密.
- Linux 获取微秒时间
- 怎么中途退出有返回值的函数啊
- sencha-touch如何修改url中的参数
- 安装QT, 执行qt-sdk-linux-x86-opensource-2010.05.bin
- Activity设为singleTop,长按Home键启动的问题
- 一个简单的凯撒加密解密程序的fgets函数用法注意
- qt4 tcp QTcpSocket QTcpServer 传输数据
- Android 2.2 SDK下载或升级方法
- ant 读取环境变量的值
- 使用数据库连接池优化程序性能
- Layar Vision利用AR将iPhone和出版物紧密相连
- Compare these examples to those in which $email is not defined.
- OpenXml SDK 2.0 创建Word 2010文档(不带[Compatibility])最简代码
- python处理中文的小技巧(太精辟了)