仅按顺序使用字母表(A 或...)的字符算术

Character Arithmetic using only the Alphabet (A or a ...) in order

我在家自学编程。我现在对 C 感兴趣,所以这是我的第一个问题。我一直在试图弄清楚为什么我的代码没有打印出正确的答案,但我不确定哪里出了问题。我将在下面附上问题和我的代码。如果有人能帮助我找出我做错了什么,我将不胜感激。

"编写一个程序,接受一个字符串并显示它,替换其中的每个字符串 字母按字母顺序向前 13 个空格。

'z' 变为 'm','Z' 变为 'M'。案例不受影响。

输出后将跟一个换行符。

如果参数个数不为 1,则程序显示一个换行符。"

我正在使用命令行参数读取字符串“My horse is Amazing”。并且预期的输出应该是“Zl ubefr vf Nznmvat”。但我得到这个作为我的输出“Zå ubeÇr vÇ Nznçvat”。

这是我的代码:

#include <stdio.h>
#include <string.h>


int main(int argc, char **argv[]){

    char ch, str[100], newStr[100];
    int i, len;

    if(argc != 2){
        printf("\n");
        return (-1);
    }

    strcpy(str, argv[1]);
    len = strlen(str);

    printf("%s    %d\n\n", str, len);

    for (i = 0; i < len; i++)
    {

        ch = str[i];

        if ((ch >= 65) && (ch <= 90)){

            ch = ch + 13;

            if(ch > 90){

                ch = ch - 90;
                ch = ch + 64;
            }


        }else if ((ch >= 97) && (ch <= 122)){

            ch = ch + 13;

            if(ch > 122){

                ch = ch - 122;
                ch = ch + 96;
        }

        }
        newStr[i] = ch;

    }

    printf("%s \n", newStr);

    return 0;
}

ch 是一个带符号的 1 字节变量,这意味着它只能表示 -128 到 127 之间的值。将 13 添加到 y 会导致该范围之外的值。