小弟编了一个小程序 但运行结果有乱码 请高手把乱码去掉 谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/04 10:11:41
程序是输入一串字符,然后把每一个字符往后移4位输出,有点象恺撒算法
!
#include <stdio.h>
#include <string.h>
void main()
{

int i;
char s1[100];

printf("input s1\n");
gets(s1);
for(i=0;i<100;i++)

if((s1[i]>='a'&&s1[i]<='z')||(s1[i]>='A'&&s1[i]<='Z'))
{
s1[i]=s1[i]+4;
if(s1[i]>'Z'&&s1[i]<='Z'+4||s1[i]>'z') s1[i]=s1[i]-26;
}
for(i=0;i<100;i++)

printf("%c",s1[i]);

}

请问怎么解决 ??谢谢!

输出乱码的原因是你定义的100个字符的数组s1(当你输入的个数等于100个字符的时候就没有问题(当然要考虑字符串结尾的字符'\0'这个是自动加上去的),因为你后面的处理都是同时处理这100个字符,须知,局部变量定义的时候是不会被初始化的,所以这100个字符当输入的个数没有达到要求时,后面的字符就是随机性的,所以你输出的时候就出现乱码,解决问题的关键是循环的退出条件,你原来应该是想输入一串字符串,是字母就+4,gets()取得一个字符串,字符串是以'\0'结尾的,所以你应该计算输入的字符串个数,可以用strlen()这个函数获得,对于后面没有输入字符不去处理就可以了,所以修改你的两个循环的退出条件为for(i=0;i<strlen(s1);i++) ,就可以了,另外,输出的时候不用一个一个输出,可以直接输出字符串用printf("%s",s1); 应该输入的gets()是读入一个字符串,会在后面自动加上'\0'所以可以这样输出.修改后的完整程序如下:
#include <stdio.h>
#include <string.h>
void main()
{

int i;
char s1[100];

printf("input s1\n");
gets(s1);
for(i=0;i<strlen(s1);i++)

if((s1[i]>='a'&&s1[i]<='z')||(s1[i]>='A'&&s1[i]<='Z'))
{
s1[i]=s1[i]+4;
if(s1[i]>'Z'&&s1[i]<='Z'+4||s1[i]>'z') s1[i]=s1[i]-26;
}

printf("%s",s1); //这个可以用你原先