Witam! Pisałem dosyć dawno temu koder, i zaprzestałem, ponieważ zatrzymałem się na momęcie, którego nie potrafie rozwiązać. Może wy coś poradzicie.
Działanie programu:
Wprowadza się tekst do kodowania. Program losuje "mnoznik", który zapisuje do struORT: ORT: ORT: ktury. Następnie przekształća po kolei znaki tekstu, na kod, tzn. dodaje do numeru znaku w ASCII wylosowany mnoznik. Po tym zapisuje całą strkturę, zawierającą kod i mnożnik do pliku (binarnie). I do tąd chodzi (bynajmniej pojawiają się ślaczki w pliku tekstowym). Problem jest z odkodowaniem, bo wtedy funkcja się sypie. Wykonuje w nieskończoność pętle. Czy ktoś wie gdzie leży błąd?
Oto kod programu:
#include <stdio.h>#include <stdlib.h>#include <math.h>void Zakoduj(char* before, int* after, int a);void Odkoduj(char* before, int* after, int a);int main(){ struct KOD { int kod[100]; int przelicznik; }; KOD podaj; char tresc[100]; printf("Koder objektowy by Guardian\nWybierz:\n"); printf("1. Koduj"); printf("2. Dekoduj"); int opcja; scanf("%d", &opcja); if(opcja == 1) { printf("Podaj tresc do kodowania:\n"); scanf("%s", &tresc); int x = (int) rand() % 21; podaj.przelicznik = (int) pow(2,(double) x); Zakoduj(tresc, podaj.kod, x); //Zapis binarny FILE* plik = fopen("kod.dat","wb"); fwrite(&podaj,1, sizeof( KOD ), plik); fclose(plik); } else { FILE* plik = fopen("kod.dat","rb"); fread(&podaj,1, sizeof( KOD ), plik); fclose(plik); Odkoduj(tresc, podaj.kod, podaj.przelicznik); printf("%s", &tresc); } return 0;}void Zakoduj(char* before, int* after, int a){ int bufor; for(int i = 0; i < 100; i++) { bufor = before[i]; after[i] = bufor + a; }}void Odkoduj(char* before, int* after, int a){ int i = 1; int bufor; while(1) { if(pow(a,1/i) == 2) break; i++; } for(int i = 0; i < 100; i++) { bufor = after[i]; before[i] = (int) after - a; }}
Z góry dziękuję za pomoc!