C Шифр ​​Виженера не печатает

Мне поручили создать шифр Виженера, но моя программа ничего не печатает. Дело в том, что я не уверен, в чем проблема; файл не читается, моя логика неверна и т. д.? Любая помощь относительно того, где я испортил, приветствуется.

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

void encrypt(char *theString, int shift)
{

    if (isalpha(*theString) && isupper(*theString))
    {

            *theString += shift;
            if (*theString >= 'Z')
            {
                    *theString = *theString - 26;
            }


    }

    theString++;

}


int main(void)
{

    FILE *inputFile;
    char KEY[256];
    char theString[80];
    int shift;
    int i;

    inputFile = fopen("code.txt", "r");
    if (inputFile == NULL)
    {
            printf("Failed to open\n");

            return(0);

    }
    fgets(theString, sizeof(theString), stdin);

                   printf("Enter the Key: ");
    fgets(KEY, sizeof(KEY), stdin);
    for (i = 0; i < 256; i++)
    {

            shift = KEY[i] - 65;
            encrypt(theString,shift);
            puts(theString);
    }
    return(0);


}

person Alaska    schedule 23.01.2017    source источник


Ответы (2)


Причина, по которой вы не видите никакого вывода, заключается в том, что это происходит первым:

fgets(theString, sizeof(theString), stdin);

Это считывает строку из стандартного ввода и ждет, пока вы нажмете Enter. Так что похоже программа зависла. Сначала следует напечатать приглашение, например:

printf("Enter a string: ");
person Tom Zych    schedule 23.01.2017

Ваш цикл encrypt изменяет только первый символ входной строки. Вам нужен цикл для изменения каждого символа:

void encrypt(char *theString, int shift)
{
    for ( ; *theString != '\0'; theString++)
    {
        if (isupper(*theString))
        {
            *theString += shift;
            if (*theString >= 'Z')
            {
                *theString = *theString - 26;
            }

        }
    }
}

Другие пункты:

  • isupper() подразумевает isalpha(); нет необходимости в обоих
  • fgets() возвращает NULL при ошибке; вы должны проверить это
person Jonathon Reinhart    schedule 23.01.2017