Witam,
mam pewne problemy z zabezpieczeniem błędów programu szyfrującego i deszyfrując, szyfr jest prosty i mono-alfabetyczny(a=11,b=12,c=13,d=14,e=15,f=21 itd.), nie o niego tutaj chodzi, chciałem jeszcze dodać, że wydaje mi się, że nie powinienem deklarować struktur globalnie, bo przez to mam dwie funkcje wypisz, no ale tak już napisałem i już nie będę tego zmieniał, chyba, że przez to są te błędy o które mi chodzi.
-uruchamiam program, za pierwszym razem chcę coś zaszyfrować następnie chcę coś odszyfrować i od razu błąd
-chcę coś odszyfrować(wciskam 1), wprowadzam inny znak niż litera i nagle błąd, jeśli dalej, nie na pierwszym miejscu wpiszę jakiś znak różny od litery to ten fragment kodu, spełnia swoje zadanie i taki znak odrzuca:
if( literaSzyfrowana >='a' && literaSzyfrowana <='z' || literaSzyfrowana >= 'A' && literaSzyfrowana <= 'Z')
{
literaZaszyfrowana=tablicaPolibiuszSzyfrowanie(literaSzyfrowana);
}
else if(literaSzyfrowana=='\n')
break;
else
continue;
Zdaje sobie sprawę, że przekopywanie się przez ten kod to nic przyjemnego, ale od czegoś trzeba zacząć, więc proszę o pomoc :)
cały kod:
#include<stdio.h>
#include<stdlib.h>
int tablicaPolibiuszSzyfrowanie(char litera);
char tablicaPolibiuszDeszyfrowanie(int litera);
int dodajLitere(int litera);
int dodajOdkodowane(char a);
void wypisz();
void wypisz2();
void gwiazdki();
struct zakodowane
{
struct zakodowane *next;
int wartosci;
};
struct odkodowane
{
struct odkodowane *next;
char litery ;
};
struct zakodowane *kolejneLitery;
struct odkodowane *odkodwaneLitery;
int main()
{
//do szyfrowania
char literaSzyfrowana;
int literaZaszyfrowana;
//do deszyfrowania
int literaDoOdszyfrowania;
char literaOdszyfrowana;
int i=0;
int wybor=0;
while(1)
{
gwiazdki();
printf("\t\tPROGRAM SZYFRUJACY I DESZYFRUJACY METODA POLIBIUSZA\n");
gwiazdki();
printf("Co chcesz zrobic?\n");
printf("1.Szyfrowanie tekstu\n");
printf("2.Deszyfrowanie tekstu\n");
printf("3.Zakoncz\n");
scanf("%d", &wybor);
getchar();
if(wybor==1)
{
gwiazdki();
printf("TEKST:\n");
while(1)
{
scanf("%c",&literaSzyfrowana);
if( literaSzyfrowana >='a' && literaSzyfrowana <='z' || literaSzyfrowana >= 'A' && literaSzyfrowana <= 'Z')
{
literaZaszyfrowana=tablicaPolibiuszSzyfrowanie(literaSzyfrowana);
}
else if(literaSzyfrowana=='\n')
break;
else
continue;
if(i==0)
{
kolejneLitery=(struct zakodowane*)malloc(sizeof(struct zakodowane));
kolejneLitery->wartosci=literaZaszyfrowana;
kolejneLitery->next=NULL;
}
else
{
dodajLitere(literaZaszyfrowana);
}
i++;
}
printf("ZASZYFROWANY:\n");
wypisz();
printf("\n");
gwiazdki();
}
else if(wybor==2)
{
gwiazdki();
printf("ZDANIE DO ODSZYFROWANIA(aby przerwac wcisnij ZERO):\n");
while(1)
{
scanf("%d",&literaDoOdszyfrowania);
if( literaDoOdszyfrowania >= 11 && literaDoOdszyfrowania <= 15 || literaDoOdszyfrowania >= 21 && literaDoOdszyfrowania <= 25 || literaDoOdszyfrowania >= 31 && literaDoOdszyfrowania <= 35 || literaDoOdszyfrowania >= 41 && literaDoOdszyfrowania <= 45 || literaDoOdszyfrowania >= 51 && literaDoOdszyfrowania <= 55 )
{
literaOdszyfrowana=tablicaPolibiuszDeszyfrowanie(literaDoOdszyfrowania);
}
else if (literaDoOdszyfrowania == 0 )
{
break;
}
else
continue;
if(i==0)
{
odkodwaneLitery=(struct odkodowane*)malloc(sizeof(struct odkodowane));
odkodwaneLitery->litery=literaOdszyfrowana;
odkodwaneLitery->next=NULL;
}
else
{
dodajOdkodowane(literaOdszyfrowana);
}
i++;
}
wypisz2();
}
else if( wybor==3 )
{
break;
}
else
continue;
}
return 0;
}
int tablicaPolibiuszSzyfrowanie(char litera)
{
if(litera=='a' || litera=='A')
return 11;
else if(litera=='b' || litera=='B')
return 12;
else if(litera=='c' || litera=='C')
return 13;
else if(litera=='d' || litera=='D')
return 14;
else if(litera=='e' || litera=='E')
return 15;
else if(litera=='f' || litera=='F')
return 21;
else if(litera=='g' || litera=='G')
return 22;
else if(litera=='h' || litera=='H')
return 23;
else if(litera=='i' || litera=='j' || litera=='J' || litera=='I')
return 24;
else if(litera=='k' || litera=='K' )
return 25;
else if(litera=='l' || litera=='L' )
return 31;
else if(litera=='m' || litera=='M' )
return 32;
else if(litera=='n' || litera=='N' )
return 33;
else if(litera=='o' || litera=='O' )
return 34;
else if(litera=='p' || litera=='P' )
return 35;
else if(litera=='q' || litera=='Q' )
return 41;
else if(litera=='r' || litera=='R' )
return 42;
else if(litera=='s' || litera=='S' )
return 43;
else if(litera=='t' || litera=='T' )
return 44;
else if(litera=='u' || litera=='U' )
return 45;
else if(litera=='v' || litera=='V' )
return 51;
else if(litera=='w' || litera=='W' )
return 52;
else if(litera=='x' || litera=='X' )
return 53;
else if(litera=='y' || litera=='Y' )
return 54;
else if(litera=='z' || litera=='Z' )
return 55;
}
char tablicaPolibiuszDeszyfrowanie(int litera)
{
if(litera==11)
return 'a';
else if(litera==12)
return 'b';
else if(litera==13)
return 'c';
else if(litera==14)
return 'd';
else if(litera==15)
return 'e';
else if(litera==21)
return 'f';
else if(litera==22)
return 'g';
else if(litera==23)
return 'h';
else if(litera==24)
return 'i';
else if(litera==25 )
return 'k';
else if(litera==31 )
return 'l';
else if(litera==32 )
return 'm';
else if(litera==33)
return 'n';
else if(litera==34)
return 'o';
else if(litera==35 )
return 'p';
else if(litera==41 )
return 'q';
else if(litera==42)
return 'r';
else if(litera==43)
return 's';
else if(litera==44 )
return 't';
else if(litera==45 )
return 'u';
else if(litera==51 )
return 'v';
else if(litera==52)
return 'w';
else if(litera==53 )
return 'x';
else if(litera==54)
return 'y';
else if(litera==55)
return 'z';
}
int dodajLitere(int a)
{
struct zakodowane *wsk;
struct zakodowane *nowy;
wsk = kolejneLitery;
while( wsk->next != NULL )
{
wsk=wsk->next;
}
nowy=(struct zakodowane*)malloc(sizeof(struct zakodowane));
nowy->wartosci=a;
nowy->next=NULL;
wsk->next=nowy;
wsk = nowy;
}
int dodajOdkodowane(char a)
{
struct odkodowane *wsk;
struct odkodowane *nowy;
wsk = odkodwaneLitery;
while( wsk->next != NULL )
{
wsk=wsk->next;
}
nowy=(struct odkodowane*)malloc(sizeof(struct odkodowane));
nowy->litery=a;
nowy->next=NULL;
wsk->next=nowy;
wsk = nowy;
}
void wypisz()
{
struct zakodowane *pomocniczy;
struct zakodowane *pomocniczy2;
pomocniczy=kolejneLitery;
pomocniczy2=kolejneLitery;
FILE *zakodowaneLitery;
zakodowaneLitery=fopen("zakodowaneLitery.txt", "w");
while( pomocniczy->next != NULL)//zapis na ekran
{
printf("%d ",pomocniczy->wartosci);
pomocniczy=pomocniczy->next;
}
printf("%d ",pomocniczy->wartosci);
while( pomocniczy2->next != NULL) //zapis do pliku
{
fprintf(zakodowaneLitery,"%d ",pomocniczy2->wartosci);
pomocniczy2=pomocniczy2->next;
}
fprintf(zakodowaneLitery,"%d ",pomocniczy2->wartosci);
fclose(zakodowaneLitery);
}
void wypisz2()
{
struct odkodowane *pomocniczy;
struct odkodowane *pomocniczy2;
pomocniczy=odkodwaneLitery;
pomocniczy2=odkodwaneLitery;
FILE *odkodowaneLitery;
odkodowaneLitery=fopen("odkodowaneLitery.txt", "w");
printf("\nODKODOWANE:");
while( pomocniczy->next != NULL)
{
printf("%c",pomocniczy->litery);
pomocniczy=pomocniczy->next;
}
printf("%c\n",pomocniczy->litery);
while( pomocniczy2->next != NULL)
{
fprintf(odkodowaneLitery, "%c" , pomocniczy2->litery);
pomocniczy2=pomocniczy2->next;
}
fprintf(odkodowaneLitery,"%c",pomocniczy2->litery);
fclose(odkodowaneLitery);
}
void gwiazdki()
{
printf("********************************************************************************");
}