CS50 - pset2 - Виженер

В настоящее время я борюсь с pset2, особенно с vigenere.

Вот мой код:

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

int main (int argc, string argv[])
{

    //Assess the fact that there is only 1 command line argument
    if(argc != 2)
    {
        printf("You should only have 1 command line argument !\n") ;
        return 1 ;
    }

    string k = argv[1] ;
    int klength = strlen(k) ;

    for(int i = 0; i < klength; i++)
    {
        if(!isalpha(k[i]))
        {
            printf("Please make sure the argument is only composed of alphabetical characters\n") ;
            return 1 ;
        }
    }

    //Get the text to be crypted
    string s = GetString() ;
    int slength = strlen(s) ;

    //Deliver the crypted text
    for( int i = 0, j = 0 ; i < slength ; i++)
    {
        int kindex = j % klength ;

        if(isalpha(s[i]))
        {
            if(isupper(s[i]))
            {
                if(isupper(k[kindex]))
                {
                    int crypt = (((s[i] - 'A') + (k[kindex] - 'A') % 26)) + 'A' ;
                    printf("%c", crypt ) ;
                }
                else
                {
                    int crypt = (((s[i] - 'A') + (k[kindex] - 'a')) % 26) + 'A' ;
                    printf("%c", crypt ) ;
                }
            }
            if(islower(s[i]))
            {
                if(isupper(k[kindex]))
                {
                    int crypt = (((s[i] - 'a') + (k[kindex] - 'A')) % 26) + 'a' ;
                    printf("%c", crypt) ;
                }
                else
                {
                    int crypt = (((s[i] - 'a') + (k[kindex] - 'a')) % 26) + 'a' ;
                    printf("%c", crypt ) ;
                }
            }
        j++ ;
        }
        else
        {
            printf("%c" , s[i]) ;
        }
    }

    printf("\n") ;
    return 0 ;
}  

С check50 я получаю следующие ошибки:

:( шифрует «BaRFoo» как «CaQGon», используя «BaZ» в качестве ключевого слова \ ожидаемый результат, но не «CakGon\n» :( шифрует «BARFOO» как «CAQGON», используя «BAZ» в качестве ключевого слова \ ожидаемый результат, но не « CAkGOh\n"

Вот моя песочница: песочница. Я не понимаю, почему два вывода не совпадают (cakgon vs cakoh) и почему он отличается от ожидаемого. Проблема, вероятно, заключается в части «// Доставить зашифрованный тест».

Я потратил несколько часов, пытаясь понять это, но безуспешно.

Заранее спасибо за любую помощь/подсказку/совет.

Батист


person bsalbot    schedule 25.02.2016    source источник
comment
Вы не описали ни одной проблемы, с которой столкнулись.   -  person Idos    schedule 25.02.2016
comment
Я отредактировал пост, постаравшись более подробно описать проблему. Спасибо за ответ.   -  person bsalbot    schedule 25.02.2016


Ответы (1)


Я наконец понял. Скобки отсутствовали перед одним из "%26".

person bsalbot    schedule 25.02.2016