我的程序无法识别字母数组中的字母

My program just will not recognize letters from alphabetical arrays

所以这个程序不会识别小写字母和大写字母数组中的字母。我已经浪费了太多时间试图解决这个问题,但我就是不明白。

它似乎只能识别 'a' 或 'A' 但即便如此也不总是如此。

#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <ctype.h>


char ALPHABETLower[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char ALPHABETUpper[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};


string plaintext = "abcdefghijklmnoprstquvwyzABCDEFGHIJKLMNOPRSTQUVWXYZ";
int i;
int j;
                        

int main(void) {
    for(i = 0; plaintext[i] != 0; i++) {
        for(j = 0; plaintext[i] == ALPHABETUpper[j]; j++)
            printf("%c\n", ALPHABETUpper[j]);
                
        for(j = 0; plaintext[i] == ALPHABETLower[j]; j++)
            printf("%c\n", ALPHABETLower[j]);
    }
}

首先,我认为您只需要在程序中包含 stdio.h

然后你有 string plainText = "...";,但你应该有 char* plainText = "...";,因为那是你用 C 语言制作字符串的方式(我不知道你拥有的所有这些库是否都是为了制作那个 string 变量,但是制作字符串的最简单和正确的方法就像我做的那样, char).

所以你在第一个 for 循环中有 i = 0; plaintext[i] != 0; i++ 这样你就可以在字符串结束时停止,但我不认为这真的有效,你可以做到的最好方法是 i = 0; i < 52; i++.

您在其他 for 循环中还有另一个问题。您正在尝试在 for 循环中创建条件语句,但我认为这甚至不可能(在 while 循环中您可以)。所以也许那些 for 循环应该是这样的:

#define MaxLetters 52
#define AlphabetLetters 26

(. . .)

int main(void)
{
    (. . .)

    for(i = 0; i < MaxLetters; i++) {    //52 letters in total on plainText string
        for(j = 0; j < AlphabetLetters; j++)    //26 letters in total on ALPHABETUpper
        {
            if(plainText[i] == ALPHABETUpper[j])        
                printf("%c\n", ALPHABETUpper[j]);
        }
        
        for(j = 0; j < AlphabetLetters; j++)    //26 letters in total on ALPHABETLower
        {
            if(plainText[i] == ALPHABETLower[j])        
                printf("%c\n", ALPHABETLower[j]);
        }
    
    (. . .)
}

所以我努力通过,这是完整的工作版本。我之前的错误是让 for 循环 运行 无限,除非它能找到 ALPHABETUpper.

中的字符
#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <ctype.h>


char ALPHABETLower[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
char ALPHABETUpper[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};


string plaintext;
int i;
int j;


int main(int argc, string argv[2]) {
    for(i = 0; argv[1][i] != 0; i++)
        if(argv[1][i] < 48 || argv[1][i] > 57) {
            printf("Usage: ./caesar key\n");
            return 1;
        }    
    
    plaintext = get_string("Plaintext: \n");

    for(i = 0; plaintext[i] != 0; i++) {
        if(isalpha(plaintext[i]) == 0)
                printf("%c", plaintext[i]);
                
        for(j = 0; j < 26; j++) {

            if(plaintext[i] == ALPHABETUpper[j])
                printf("%c", ALPHABETUpper[(j + atoi(argv[1])) % 26]);
                    
            if(plaintext[i] == ALPHABETLower[j])
                printf("%c", ALPHABETLower[(j + atoi(argv[1])) % 26]);
        }
    }
}