int main()
{
char a[100],d[100];
int i,j=0;
printf("輸入要翻譯的密碼,以“@”結束:\n");
scanf("%s",a);
for(i=0;a[i]!='@';i++)
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
{
if(a[i]>='a'&&a[i]<'x')
a[i]=a[i]+3;//直接加減相差的位數
else if(a[i]>='A'&&a[i]<'X')
{
a[i]=a[i]+3;//先轉化成加三位的大寫,再轉化成小寫
a[i]=a[i]+32;//大小寫相差32位
}
else if(a[i] >= 'X'&&a[i] <= 'Z')//X、Y、Z都應該做處理
a[i]=a[i]+9;
else if(a[i]>='x')//x、y、z都應該做處理
a[i] -= 23;
}
d[i]=a[i];
j++;//統計字符的個數,以免後面的輸出中有亂碼
}
printf("密碼的譯文是:\n");
for(i=0;i<=j;i++)
printf("%c",d[i]);
printf("\n");
return 0;
}這樣修改之後應該就好了,根據題目要求,我覺得x、y、z的大小寫都應該特殊處理,那個加減的數字是根據ASCII碼計算出來的