Mam problem, pytałem na tweaku, gościu powiedział, że u niego program zadziałał pod Gentoo, ja kompiluje go przez gcc z Code:Blocks czyli tym samym kompilatorem, i nie odkodowuje mi! 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\n");
printf("2. Dekoduj\n");
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\n", 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++;
}
a = i;
for(int i = 0; i < 100; i++)
{
bufor = after[i];
before[i] = (char)( after[i] - a);
}
}