|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 MeowMoo 于 2021-1-6 17:23 编辑
大佬们帮忙,程序功能是A(a)-V(v)译为 E(e)-Z(z),WXYZ(wxyz)译为ABCD(abcd);运行结果正确但是会有乱码,应该是因为数组未定义部分的问题,那怎样把数组未定义的数省略不赋值,去掉乱码?
程序如下
#include <stdio.h>
int main(void)
{
char a[20];
int i;
for(i=0;i<=20;i++)
{
scanf("%c",&a[i]);
if(a[i]=='\n')
break;
}
printf("%s\n",a);
for(i=0;a[i]!='\n';i++)
{
if((('A'<=a[i])&&(a[i]<='V'))||(('a'<=a[i])&&(a[i]<='v')))
{
a[i]=a[i]+4;
}
if((('W'<=a[i])&&(a[i]<='Z'))||(('w'<=a[i])&&(a[i]<='z')))
{
a[i]=a[i]-22;
}
}
printf("%s\n",a);
}
运行结果如下
qwert
qwert
烫烫烫烫烫烫烫烫烫啲陎
uaivb
烫烫烫烫烫烫烫烫烫啲陎
请按任意键继续. . .
本帖最后由 jackz007 于 2021-1-6 17:12 编辑
字符串末尾没有结束标志
- for(i = 0 ; i < 19 ; i ++) // i 只能小于 19,不可以等于 20,因为下标索引 19 的位置必须预留出来用于保存字符串结束标志字符 '\0'
- {
- scanf("%c" , & a[i]) ;
- if(a[i] == '\n') break ;
- }
- a[i] = '\0' ; // 添加此句
复制代码
下面是我写的代码,谨供楼主参考
- #include <stdio.h>
- main(void)
- {
- char s[256] ;
- int n ;
- for(n = 0 ; n < 255 && (s[n] = getchar()) != '\n'; n ++) {
- if(s[n] >= 'A' && s[n] <= 'Z' || s[n] >= 'a' && s[n] <= 'z') {
- s[n] += 4 ;
- if(s[n] > 'Z' && s[n] < 'Z' + 5 || s[n] > 'z' && s[n] < 'z' + 5) s[n] -= 26 ;
- }
- }
- s[n] = '\0' ;
- printf("%s\n" , s) ;
- }
复制代码
|
|