ROT13代码错误(C)



我的程序应该接受一个字符,如果它是一个字母,使用ROT13对它进行编码,否则保持不变,然后打印结果。

下面的代码适用于所有小写字母和大写字母A-M,但不适用于大写字母N-Z和其他符号/数字。感谢任何帮助:)

#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#define TRUE 1
#define FALSE 0
#define UPPER_START 65
#define UPPER_END 90
#define LOWER_START 97
#define LOWER_END 122
#define UPPER_MID 77
#define LOWER_MID 109

void testEncode (void); int isValid (char cipherChar); char encode (char letter);
int main (int argc, char* argv[]) {
    char cipherChar;
    scanf("%c", &cipherChar);
    if (isValid(cipherChar) == TRUE) {
        printf("%c", encode (cipherChar));
    } else if (isValid(cipherChar) == FALSE) {
       printf("%c", cipherChar);
    }
       return EXIT_SUCCESS;
}
int isValid (char cipherChar) {
    int valid;
    if ((cipherChar >= UPPER_START) &&
        (cipherChar <= UPPER_END)) {
        valid = TRUE;
    } else if ((cipherChar >= LOWER_START) &&
            (cipherChar <= LOWER_END)) {
        valid = TRUE;
    } else {
        valid = FALSE;
    }
    return valid;
}
char encode (char letter) {
    if ((letter <= UPPER_MID) || (letter <= LOWER_MID)) {
        letter = letter + 13;
    } else {
        letter = (letter - 13);
    }
    return letter;
}

ROT13通常不会影响[A-Za-z]以外的字符,所以我会说忽略它们。除非你也有理由旋转它们。例如,有时0-9用ROT5处理。

在任何情况下,你的if语句与子句(letter <= UPPER_MID) || (letter <= LOWER_MID)基本上说,"'a'之前的任何字符得到13添加到它",所以这就是为什么[N-Z]不能正常工作。相反,尝试打破大写和小写的逻辑,并按大小写处理换行,如下所示:

if (letter >= UPPER_START && letter <= UPPER_END) {
    letter = letter + 13;
    if (letter > UPPER_END) {
        letter -= 13;
    }
} else if (letter >= LOWER_START && letter <= LOWER_END) {
    letter = (letter + 13);
    if (letter > LOWER_END) {
        letter -= 13;
    }
}

相关内容

  • 没有找到相关文章

最新更新