Szyfr cezara , małe i duże litery

0

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

Mam pytanie, po co bawisz się w jakieś 65 czy 97 jak równie dobrze można wpisać 'A' lub 'a'?

0

Rozwiązałem problem. Zamiast modulo 26 dałem w tym miejscu 28 i działa bardzo dobrze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1