Caesar Cypher - базовое шифрование.

Я бы попросил вашей помощи, чтобы понять, почему переменная k получает отрицательное значение, даже если вторая командная строка (argv [1]), например, равна 3.

int main (int argc, string argv[])
{
    string text;
    int k = 0;

    do 
    {
        printf("Type in a plain text:\n");
        text = GetString();

//k receives wrong value
        k = (int) argv[1]; 

// Sanity check
        printf ("argv[1] is %s and k is %d\n", argv[1], k);
    }
    while (k < 0);
0
Marcello Scattolini 27 Ноя 2016 в 16:31

2 ответа

Лучший ответ

Здесь вам нужно сделать conversion, а не type-cast, поэтому приведение типов к int не поможет, вам нужно преобразовать char * в {{ X4}} с использованием библиотечной функции, такой как обычно используемый int atoi (const char *str), который определен в файле заголовка stdlib.h. Не забудьте #include это. !

Однако я бы посоветовал использовать strtol из-за надежной отчетности об ошибках. Он определяет возвращаемое значение при переполнении (возвращает LONG_MIN в случае underflow и LONG_MAX в случае переполнения), а также позволяет пользователю установить значение base как следовали во время преобразования.

0
Jarvis 27 Ноя 2016 в 13:56

Вы не можете просто преобразовать строку в int. Вам нужно его действительно разобрать. Вы можете использовать функцию atoi, включенную в stdlib.h. Вам нужно будет положить:

#include <stdlib.h>

В верхней части файла и измените строку:

k = (int) argv[1];

Чтобы :

k = atoi(argv[1]);
0
lolsky 27 Ноя 2016 в 13:34