Я пытаюсь сделать шифр Виженера на языке C. Предполагается, что ввод должен состоять только из букв алфавита (a->z).
В настоящее время моя проблема заключается в том, что на выходе выводятся только 4 символа и выводятся странные символы вне алфавита. Я создал операторы if, чтобы предотвратить это, но, похоже, они не работают. Любой совет?
#include <stdio.h>
int main(){
int i=0;
//Vigenere Cipher-- keyword is "apple"
//a = 1 value shift
//p = 16 value shift
//p = 16 value shift
//l = 17 value shift
//e = 5 value shift
//cleaning out string array
char guy[100];
printf("Enter the plain text: ");
fgets(guy, 100, stdin);//takes user's input
while (guy[i] != '\0'){ //while loop that runs until it reaches the end of the string
if ((i%5==0) || i==0){ //checks to see which character it is in the string, for instance the numbers 0,5,10,15,20 should all be added by 1
guy[i] = guy[i]+1;
if (guy[i]>'z' && guy[i]<'A'){
guy[i]-25;
}
if (guy[i]>'Z' && guy[i]>'A'){
guy[i]-25;
}
}
if (((i-1)%5==0) || i==1){ //all numbers that are second in the key word 'apple', such as 1,6,11,16
guy[i]=guy[i]+16;
if (guy[i]>'z' && guy[i]<'A'){
guy[i]-25;
}
if (guy[i]>'Z' && guy[i]>'A'){
guy[i]-25;
}
}
if (((i-2)%5==0) || i==2){// all numbers that are third to the key word 'apple' , such as 2,7,12,17,22
guy[i]=guy[i]+16;
if (guy[i]>'z'&& guy[i]<'A'){
guy[i]-25;
}
if (guy[i]>'Z'&& guy[i]>'A'){
guy[i]-25;
}
}
if(((i-3)%5==0) || i==3){// all numbers that are fourth to the key word 'apple', such as 3,8,13,18
guy[i]=guy[i]+17;
if (guy[i]>'z'&&guy[i]<'A'){//takes care of z
guy[i]-25;
}
if (guy[i]>'Z' && guy[i]>'A'){//takes care of Z
guy[i]-25;
}
}
if(((i-4)%5==0) || i==4){// all numbers that are fifth in the key word 'apple', such as 4,9,14,19
guy[i]=guy[i]+5;
if (guy[i]>'z'&& guy[i]<'A'){
guy[i]-25;
}
if (guy[i]>'Z' && guy[i]>'A'){
guy[i]-25;
}
}
else {
i++;
}
}
printf("Encrypted text is: %s\n",guy);
}
char encrypt_char(char plain_text, char key)
, а затем вызвать ее с помощьюguy[i] = encrypt_char(guy[i], "apple"[i%5]);
. Кроме того,if (guy[i]>'Z'&& guy[i]>'A')
совпадает сif (guy[i]>'Z')
. Вы также должны научиться использовать отладчик, чтобы вы могли пройти и посмотреть, что происходит, а также подумать о том, как должны быть зашифрованы ПРОБЕЛ или цифра и т. д., если вообще должны быть зашифрованы. - person Ken Y-N   schedule 30.11.2016