Подстановка CS50, проблема с проверкой на наличие дубликатов и проверкой всех буквенных символов - PullRequest
0 голосов
/ 16 апреля 2020

Этот код не закончен, но у меня возникли две проблемы.
Во-первых, когда в ключе есть не алфавит c символов, выдается сообщение об ошибке «Ключ должен содержать только буквы». раз, когда есть не алфавит c символов, например: если в ключе четыре цифры, сообщение об ошибке будет напечатано четыре раза.

Во-вторых, сообщение об ошибке не печатается, если ключ содержит повторяющиеся буквы, вместо этого программа действует так, как будто ключ действителен.

Спасибо за любой совет.

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

int main(int argc, string argv[])

{
if (argc != 2)
{
    printf("Usage: ./caesarsub key\n");
    return 1;
}
// Check key contains only letters
for (int i = 0, n = strlen(argv[1]); i < n; i++)
    {
        if (!isalpha(argv[1] [i]))
        {
            printf("Key must only contain letters\n");
        }
        // Check letters are not repeated
        else
        {
            int count = 0;
            for (int m = i + 1; n < strlen(argv[1]); m++)
            {
                if (argv[1][i] == argv[1][m])
                {
                    count++;
                }
            }
            if (count > 0)
            printf("Key must not contain repeated characters\n");
            }
        }
// Check key contains 26 letters
if (strlen(argv[1]) != 26)
    {
        printf("Key must be 26 letters\n");
    }
}

1 Ответ

0 голосов
/ 16 апреля 2020

Внимательно посмотрите на разницу между подпрограммой, которая проверяет наличие аргумента (ie if (argc != 2)), и подпрограммой, которая проверяет только альфа (ie if (!isalpha(argv[1] [i]))). Один выходит из программы (то есть «возвращается из основной функции»), а другой - нет.

Другая проблема выглядит здесь как опечатка for (int m = i + 1; n < strlen(argv[1]); m++). For l oop не выполняется, потому что n < strlen... никогда не выполняется.

...