不懂为什么 ?求助!!!!!!!!AsCII码的问题吗?

ziweixinghello 2009-04-11 12:56:41
我把t改成*p时候出错了!比如把小写的z加上一个大于6的数机密后就出现问题!不懂为什么 ?求助!!!!!!!!
/*void main()
{
char a[100];
char *p;
int i,t;

p=a;
printf("请输入要加密的文件:\n");
gets(a);

printf("请输入要加密的密钥长度:");
scanf("%d",&i);
if(i>26)
{
i%=26;
}
while(*p!='\0')
{
if((*p>='a')&&(*p<='z'))
{
int t=*p+i;
if(t>'z')
{
*p=t-26;
}

}
if((*p>='A')&&(*p<='Z'))
{
t=*p+i;
if(t>'Z')
{
*p=t-26;
}

}


p++;
}
printf("加密结果为:\n");
printf("%s\n",a);

}*/
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mosaic 2009-04-11
  • 打赏
  • 举报
回复
z的ascii为122,加上大于等于6的数就大于等于128了,对于char来说越界了。

如楼上所说改为unsigned char应该就可以加比较大的数了。
donle1000 2009-04-11
  • 打赏
  • 举报
回复

#include <stdio.h>

void main()
{
unsigned char a[100]; //定义为无符号,不然'z'+i很容易大于128,变成负数,后面的if都没用了
unsigned char *p, *q;
int i;
q = p=a;
printf("请输入要加密的文件:\n");
scanf("%[^\n]", a);
printf("请输入要加密的密钥长度:");
scanf("%d",&i);
if(i>26)
{
i%=26;
}
while(*p!='\0')
{
if((*p>='a')&&(*p <='z'))
{
// q = p;
*p=*p+i;
// p = q;
if(*p>'z')
{
*p=*p-26;
}

}
if((*p>='A')&&(*p <='Z'))
{
*p=*p+i;
if(*p>'Z')
{
*p=*p-26;
}

}


p++;
}
printf("加密结果为:\n");
printf("%s\n",a);

}
donle1000 2009-04-11
  • 打赏
  • 举报
回复

#include <stdio.h>

void main()
{
unsigned char a[100]; //定义为无符号,不然'z'+i很容易大于128,变成负数,后面的if都没用了
unsigned char *p, *q;
int i;
q = p=a;
printf("请输入要加密的文件:\n");
scanf("%[^\n]", a);
printf("请输入要加密的密钥长度:");
scanf("%d",&i);
if(i>26)
{
i%=26;
}
while(*p!='\0')
{
if((*p>='a')&&(*p <='z'))
{
// q = p;
*p=*p+i;
// p = q;
if(*p>'z')
{
*p=*p-26;
}

}
if((*p>='A')&&(*p <='Z'))
{
*p=*p+i;
if(*p>'Z')
{
*p=*p-26;
}

}


p++;
}
printf("加密结果为:\n");
printf("%s\n",a);

}
mengde007 2009-04-11
  • 打赏
  • 举报
回复
t要改的话,那可以改成p[i];就行了

69,371

社区成员

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

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