Некорректно работает шифрование?
Сейчас пытаюсь реализовать Шифр Цезаря. При попытке зашифровать текст, написанный на кириллице, в out-text записывается всё без изменений. При попытке зашифровать латиницу всё работает корректно ( предварительно изменив немного код, подстроив его под латиницу ). Сначала я предположил, что дело всё в том, что перменная "c" имеет тип char, но при смене char на wchar_t ситуация не изменилась.
ОС - Windows 10, Visual Studio Code, использую компилятор MinGW. Может эта информация поможет.
#include <stdio.h>
#include <locale.h>
#define nUKR 33 // Кол-во букв в алфавите
void encrypt(int n)
{
int marker;
wchar_t c;
FILE *fp1, *fp2;
fp1 = fopen("in-text.txt", "r");
if(fp1){
c = getc(fp1);
fp2 = fopen("out-text.txt", "w");
while(!feof(fp1))
{
marker = 0;
if(c >= 'А' && c <= 'Я'){
c = c + (n % nUKR);
if(c > 'Я')
c = 'А' + ( c - 'Я') - 1;
fprintf(fp2, "%c", c);
marker = 1;
}
if(c >= 'а' && c <= 'я'){
c = c + (n % nUKR);
if(c > 'я')
{
c = 'а' + ( c - 'я') - 1;
}
fprintf(fp2, "%c", c);
marker = 1;
}
if(!marker)
{
fprintf(fp2, "%c", c);
}
c = getc(fp1);
}
printf("\aThe encryption was successful. The encrypted data is in the file - out-text.txt.\n");
fclose(fp1);
fclose(fp2);
}
else
{
printf("\aFile in-text.txt doesn't exist...\n");
}
}
int main(void)
{
int k;
char c;
setlocale(LC_ALL, "");
printf("Caesar's cipher\nEnter the key value: ");
scanf("%d", &k);
getchar();
if(k >= 1){
printf("Encrypt text in-text.txt? (Y/N) ");
scanf("%c", &c);
if(c == 'Y' || c == 'y'){
encrypt(k);
}
printf("Decrypt text from out-text.txt? (Y/N) ");
getchar();
scanf("%c", &c);
if(c == 'Y' || c == 'y'){
decipher(k);
}
getchar();
getchar();
}
return 0;
}