Caesar密码

muxiazhinian 2010-11-29 12:57:16
代码如下:但是编出出来为什么会有中文呢?
#include<string.h>
#include<stdio.h>

void decipher(char message[])
{
char plain[27]="VWXYZABCDEFGHIJKLMNOPQRSTU";
char cipherEnd[201];
int i,cipherLen;
gets(message);
cipherLen=strlen(message);
for(i=0;i<cipherLen;i++)

if(message[i]>='A'||message[i]<='Z')
message[i]=plain[message[i]-'A'];
gets(cipherEnd);
return;


}
void main()
{
char message[201];
gets(message);
while(strcmp(message,"START")==0)
{
decipher(message);
printf("%s\n",message);
gets(message);

}
return;
}
...全文
348 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuguifu 2010-12-17
  • 打赏
  • 举报
回复
烫烫之类的中文吧?
这些中文,只是你没有初始化数组,导致那块内存区的数据是乱码
用memset等函数初始化下,就ok啦
muxiazhinian 2010-12-02
  • 打赏
  • 举报
回复
恩 是的 就是有这些个中文
muxiazhinian 2010-11-30
  • 打赏
  • 举报
回复
不太理解 麻烦可不可以具体的改一下
就想叫yoko 2010-11-30
  • 打赏
  • 举报
回复
烫烫之类的中文吧?
jasonslyvia 2010-11-30
  • 打赏
  • 举报
回复
好吧,其实我们处理这个问题方法是不一样的
但我看出你的错误了
自己要多调试呀

for(i=0;i<cipherLen;i++)

if(message[i]>='A'&&message[i]<='Z')
message[i]=plain[message[i]-'A'];
同时满足条件才进行解密
jasonslyvia 2010-11-29
  • 打赏
  • 举报
回复
问题出在逗号上,楼主在

for(i=0;i<cipherLen;i++)

if(message[i]>='A'||message[i]<='Z')
message[i]=plain[message[i]-'A'];

时注意如果messge[i]是逗号则跳过,continue;
逗号的ASCII码是39,楼主应该用各种数据调试一下!
muxiazhinian 2010-11-29
  • 打赏
  • 举报
回复
比如输入
START
DALKDJ,KS JDKK,DKAJIKIJ
END
输出就会有中文
jasonslyvia 2010-11-29
  • 打赏
  • 举报
回复
我用VC6.0编译也没问题,这是我们大一课设= =
cunyan_0519 2010-11-29
  • 打赏
  • 举报
回复
顶了,不明白。
無_1024 2010-11-29
  • 打赏
  • 举报
回复
有什么中文啊 我用VC6.0没有 你的测试数据是什么?

69,382

社区成员

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

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