Если оператор не выполняется! CS50 = PSet2 - PullRequest
0 голосов
/ 10 июля 2020

Я новичок в программировании (начал правильно около 4 недель назад), и сейчас прохожу онлайн-курс CS50. Кажется, я столкнулся с небольшим препятствием в наборе задач на второй неделе - «Цезарь», где мой оператор if вообще не выполняется.

Прямо сейчас программа должна запускаться, когда число введен в командную строку, т.е. './caesar 10' (который, в конечном итоге, будет использоваться моим «ключом», но еще не успел его реализовать). Он должен запрашивать шифрование открытого текста и на данный момент просто +1 к каждому символу в открытом тексте.

Программа просто не выполняет оператор if, даже если все логические выражения кажутся истинными. Я запустил его через функцию debug50 в cs50 IDE, и все кажется правильным, то есть значение arg c равно 2, k будет иметь значение '10', когда я введу '10' в команду line.

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

Заранее спасибо за любую / всю помощь! :)

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

int main(int argc, string argv[])
{
    int k = atoi(argv[1]);

    if (argc == 2 && isdigit(k))
    {
        string s = get_string("Plaintext: ");

        for(int i = 0, n = strlen(s); i < n; i++)
        {
            printf("Cipertext: %c", s[i] + 1);

            if (s[i] == ' ')
            {
                return 0;
            }

        }
    }

    else
    {
        printf("Usage: ./caesar key\n");

    }
}

1 Ответ

2 голосов
/ 10 июля 2020
Функция

isdigit() проверяет, представляет ли переменная char di git, т.е. находится ли ее значение от 48 до 57 (при условии кодировки ASCII). Ваш k имеет значение 10 - что не является di git (оставим в стороне понижение с int до char).

...