[C] Enigma błąd 2 liter

0

Cześć. To mój pierwszy post więc nie oceniajcie za surowo :)

Mam do zrobienia projekt Szyfrujący/Deszyfrujący (ten sam algorytm) Enigmą(wielkich liter alfabetu). Nie wiem co jest powodem złego szyfrowania 2 liter. 'F' oraz 'U'.
Powinien szyfrować tak:

A -> U -> A
T - > F -> T

a robi tak:

U -> T -> F -> C

'C' szyfruje już poprawnie w 'J'.
Wrzucam program gotowy do skompilowania z usuniętymi zbędnymi fragmentami. Bląd występuje w tym fragmencie.

#include <stdio.h>
#include <stdlib.h>

char alfabet[26]=       {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
char P1[26]=            {"BDFHJLCPRTXVZNYEIWGAKMUSQO"};
char P2[26]=            {"AJDKSIRUXBLHWTMCQGZNPYFVOE"};
char P3[26]=            {"EKMFLGDQVZNTOWYHXUSPAIBRCJ"};
char bebenB[26]=        {"YRUHQSLDPXNGOKMIEBFZCWVJAT"};

char dobebna (int n, char litera, char tab[]);
char odbebna(char litera, char tab[], char tab2[]);
int main()
{
    int i,n;
    char litera;

    char zdanie[]={"UFTA"};
    int rozmiar =sizeof zdanie;
    char wynik[rozmiar];


        for (i=0;i<=rozmiar-1;i++)
        {

            litera=zdanie[i];
            if (litera != ' ')

                {

                    litera=dobebna(n, litera, P1);
                    litera=dobebna(n, litera, P2);
                    litera=dobebna(n, litera, P3);
                    litera=dobebna(n, litera, bebenB);

                    n = litera - 65;
                    litera = alfabet[n];

                    litera= odbebna(litera,P3,alfabet);
                    litera= odbebna(litera,P2,alfabet);
                    litera= odbebna(litera,P1,alfabet);

                    printf("%c",litera);
                    wynik[i]=litera;
                }

            else
                {printf(" ");
                wynik[i]=litera;}
        }
    printf("\nWynik z tablicy: %s", wynik);

    return 0;

}

char dobebna (int n, char litera, char tab[]){
	n = litera - 65;
	litera = tab[n];
	return litera;

}

char odbebna(char litera, char tab[], char tab2[]){
	int od=0;
    do
    od++;
	while(tab[od]!=litera);
        {
        litera= tab2[od];
        }
    return litera;

}
 
0
  1. przekazanie zmiennych przez parametr aby użyc jako zmienne lokalne - zły pomysł: char dobebna (char litera,char tab[]) { return tab[litera-65]; }
  2. while(tab[od]!=litera); wykonuje tego średnika (nie to co w klamerkach niżej)

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