2017-01-23 4 views
0

Мне было поручено создать шифр vigenere, но моя программа ничего не печатает. Дело в том, что я не уверен, где проблема; это файл, который не читается, неверна ли моя логика и т. д.? Любая помощь относительно того, где я испортилась, ценится.C Vigenere Cipher Not Printing

#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); 


} 

ответ

0

Ваш 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 при ошибке; Вы должны проверить это
1

Причины вы не видите никакого выхода, потому что это происходит первое:

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

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

printf("Enter a string: ");