c语言小白问题,高分求帮个忙。我一窍不通。

来源:百度知道 编辑:UC知道 时间:2024/06/12 00:17:29
#include<string.h>
main()
{
int i;
char *s;
char *z;
gets(s);
for(i=0;i<strlen(s);i++){ *(z+i)=*(s+i)+4;
if(*(z+i)>90&&*(z+i)<97||*(z+i)>122)*(z+i)=*(z+i)-26;
}
*(z+i)='\0';
puts(z);
getch();
}

(请好心人根据以上加密程序自己编写相应的解密程序,文档发送给我这个小白,可以直接回答,也可以到我邮箱:lichongjia@vip.qq.com!)分可以再给,只要能解决问题。谢谢!

源程序本身就有问题,定义了s,z可是没有分配空间。应该定义成s[100],z[100]这样,当然100只是一个例子,可以根据实际需要分配。

解密程序如下
#include<string.h>
main()
{
int i;
char s[100];
char z[100];
gets(s);

for(i=0;i<strlen(s);i++)
{ *(z+i)=*(s+i)-4;
if(*(z+i)>90&&*(z+i)<97||*(z+i)<65)
*(z+i)=*(z+i)+26;
}
*(z+i)='\0';
puts(z);
getch();
}

这个程序错误和警告实在很多:1、字符指针未分配空间(error) 2、getch属于conio.h的库函数(error) 3、gets、puts属于stdio.h的库函数(仅有strlen属于string.h的库函数) (error) 4、main函数未定义类型(warning) 5、定义的两字符串未初始化为空(warning,实则可能导致程序运行错误) 6、strlen返回无符号整型数,最好把i定义为unsigned int(warning) 7、为了程序明了清晰,把加密单独定义为一个函数
具体程序如下:
#include<string.h>
#include<stdio.h>
#include<conio.h>
#define NUM 100
void incode();
void decode();

char s[NUM],z[NUM];//全局变量默认定义为空
unsigned int i;

void main()
{
gets(s);
incode();
decode();
}