Witam mam mały problem. Napisałem szyfr cezara który pobiera ciąg znaków z pliku. Gdy przesuwam duże litery w lewo lub w prawo wszystko działa poprawnie. Problem pojawia się gdy chcę przesunąć małą literę tylko i wyłącznie w lewo... w prawo działa poprawnie. Zamiast "a" przesunąć na "z" przy kluczu (-1) przesuwa mi np. na "d". Co muszę poprawić ? Dzięki za pomoc.
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define PLIK "ZASZYFROWANE.txt"
#define PLICZEK "ROZSZYFROWANE.txt"
main()
{
char tab[1001];
int i;
int klucz;
int x;
int p;
int y;
FILE *zw;
char zp;
zw=fopen("E:\\foll\\plik.txt","r");
if(zw==NULL)
printf("plik jest pusty, lub nie istnieje");
while(zp!=EOF)
{
zp=fgetc(zw); // czytanie z pliku
tab[i]=zp;
i++;
}
fclose(zw);
// komentarz
printf("Twoje slowo w pliku to :%s",tab);
x=tab; // nazwa rozszyfrowana
int dl = strlen(x)-1;
//szyfrowanie
printf("Teraz podaj przedzial o ile pozycji maja byc przesuniete litery \n");
scanf("%d",&klucz);
if(klucz >= 0) //rozpoczecie szyfrowania
for(i=0;i<dl;i++){
if (tab[i]>64&&tab[i]<91)
tab[i] = (tab[i] - 65 + klucz)%26 + 65;
else
tab[i] = (tab[i] - 97 + klucz)%26 + 97;
}
if(klucz < 0)
for(i=0;i<dl;i++){
if (tab[i]>64&&tab[i]<91)
tab[i] = (tab[i] + 65 + klucz)%26 + 65;
else
tab[i] = (tab[i] + 97 + klucz)%26 + 97; // <-------- tutaj nie działa poprawnie
}
printf("Twoj wyraz po zaszyfrowaniu to: %s \n",tab);