Цезарь Шифр ​​для CS50

Я смотрю на эту проблему неделями, и у меня ничего нет! Это не работает, я знаю так много, но я не знаю, почему или что не так. Я знаю, что разработчик выплевывает "ошибка: ожидаемое выражение" в отношении выделенной мною строки, но на самом деле это только верхушка айсберга. Если кто-нибудь вообще знает, как это исправить, я был бы очень признателен!

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

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

    //Get the key
    if (argc != 2 || atoi(argv[1]) < 0)
    {
        printf("Usage: ./caesar k");
        return 1;
    }

    int key = atoi(argv[1]);
    string plaintex;
    string plaintext = GetString();

    for (int i = 0, n = strlen(plaintext); n < i; i++)
    {
        if (plaintext[i] > 'A' && plaintext[i] <= 'Z')
        {
            plaintext[i] = (plaintext[i] - 'A' + key) % 26 + 'A';
        }
    }  
    for (int i = 0, n = strlen(plaintext); n < i; i++)
    {           
        if (plaintext[i] >= 'A' && plaintext[i] >= 'Z')  // Highlighted line
        {
            plaintext[i] = (plaintext[i] - 'A' + key) % 26 + 'A';
        }
        else if (plaintext[i] >= 'a' && plaintext[i] < 'z')
        {
            plaintext[i] = (plaintext[i] - 'a' + key) % 26 + 'a';
        }
        else
        {
            printf("%c\n", plaintext[i]);
        }
    }
    return 0;
}

2 ответа

if (plaintext[i] >= 'A' && plaintext[i] >= 'Z')

должно быть

if (plaintext[i] >= 'A' && plaintext[i] <= 'Z')

A имеет менее значимый индекс таблицы символов, чем Z, Более вероятный A == 65 и Z == 90

if (plaintext[i] >= 'A' && plaintext[i] >= 'Z')

Вы говорите: "Если что-то больше 65, а также больше 90". Логика не имеет никакого смысла, это то же самое, что сказать "если что-то больше 90".

Ты наверное имел ввиду

if (plaintext[i] >= 'A' && plaintext[i] <= 'Z')
Другие вопросы по тегам