Mam problem z programem deszyfrującym. program już robi statystykę znaków w tekście oraz jest w nim umieszczona statystyka standardowa wysatepowania znakow w języku angielskim. Problem sprawia mi natomiast ta część kodu, w której dochodzi do zamiany liter w oryginalnym pliku na ich odpowiedniki wzięte ze statystyki (tablica Tab[i]) oraz zapis do pliku wyjściowego - zapis nie dziala, tj. zapisuje tylko najczęstszy znak w pliku, poprawnie odszyforwany.przypuszczam że to jakiś problem z pętlami, a może i nie tylko. Bardzo prosze o pomoc w rozwiązaniu tego problemu.

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

int freq(const void *arg1, const void *arg2); 	  //deklaracja funckji
						  //poronujacej czestosc
typedef struct char_str                           //struktura przechowuje
 {                                                //informacje o odczytanym
  int val; 		                          //znaku {char)z szyfrogramu
  int fre;					  //wartosc i czestosc	
 } CH;

CH frequency[256];	                          //tablica czestosci znakow
char Tab[256];      
char tt[256];
char ttt[256];
                                            
int main(int argc, char *argv[])                  //glowny program
{
 int counter,c,i,k,shift;	                  //zmienne globalne
 FILE *input;	   				  //pliki wej/wyj
 FILE *output;
 char cc;
	
 printf("Program zlicza wystapienia kazdego znaku w podanym pliku\n");
 printf("zaszyfrowanych, a nastepnie przeprowadza statystyke czestoci\n");
 printf("znakow w jezyku angielskim i na jej podstawie deszyfruje szyfrogram\n");
			
   if (argc < 2)			 	//jezeli nie podano nazwy pliku wej.,
   {						//komunikat o uruchamianiu programu	
   printf("Prosze wpisac: ./a.out <nazwa pliku z tekstem szyfrowanym>\n");
   while (getchar() != '\n');
   exit(0);					//wyjscie z programu
   }
 
  input = fopen(argv[1], "r");			//oznacza iz podano nazwe
  if (input == NULL)				//jako argument linii polecen
   {
   printf("Brak pliku %s ! \n", argv[1]);	//jezeli brak pliku-wyjscie
   exit(EXIT_FAILURE);
   }

 for (i=0;i<256;i++)				//plik wej. pomyslnie otwarty
 frequency[i].val=i;				//do odczytu
 c=fgetc(input);
	while (c!=EOF)				//liczenie znakow
	{
	 counter++;
	 if (c>=' ')				//zwiekszamy czestosc danego
	  frequency[c].fre++;			//znaku, gdy jest on > 32
	 c=fgetc(input);			//spacja
	}
 fclose(input);					//zamkniecie pliku
 qsort(frequency, 256, sizeof(CH), freq);       //wykorzystanie funckji qsort
  for (counter=0,k=0;counter<256;counter++)	//z biblioteki <stdlib.h>
  {						//(sortowanie tabeli czestoci
  if (frequency[counter].fre != 0)		//dla czestosci roznych od 0
   {						//mozna wypisac statstyke
   printf("%3c  = %d\n",frequency[counter].val,frequency[counter].fre);
   //Tab[counter]=frequency[counter].val;
   tt[counter]=frequency[counter].val;
   }
 
 }

printf("%3c  \n",Tab[0]);
  Tab[0]=' ';
  Tab[1]='e';
  Tab[2]='a';
 Tab[3]='r';
  Tab[4]='i';
  Tab[5]='o';
 Tab[6]='t';
  Tab[7]='n';
  Tab[8]='s';
Tab[9]='l';
Tab[10]='c';
  Tab[11]='u';
 Tab[12]='d';
  Tab[13]='p';
  Tab[14]='m';
 Tab[15]='h';
  Tab[16]='g';
  Tab[17]='b';
Tab[18]='f';

 Tab[19]='y';
  Tab[20]='w';
 Tab[21]='k';
  Tab[22]='v';
  Tab[23]='x';
 Tab[24]='z';
  Tab[25]='j';
  Tab[26]='q';


 //wypisanie najczestszego znaku i ilosci jego wystapien
 //printf("najczestszym znakiem jest: %3c",frequency[1].val);
				
output = fopen("text.dat", "w");               //otwarcie pliku wyjsciowego
input  =  fopen(argv[1], "r");		       //i ponownie wejsciowego	


 		           
for (i=1;i<100;i++)
 {

 tt[i] = fgetc(input);	
while ((tt[i]=getc(input))!=EOF)

{

//printf("%c",tt[i]);
if (tt[i]=frequency[counter].val);
{
tt[i]=Tab[i];

printf("%c ",tt[i]);}
putc(tt[i],output);
}
}

 fclose(input);
 fclose(output);
 printf("\nzakonczono deszyfrowanie,  klawisz 'ENTER' zakonczy program");
 while (getchar() != '\n');
 return(0);
}

//funkcja porownujaca czestosc wystepowanie znakow, uzywana przez
//funckcje qsort sertujaca tabele czestosci znakow w tekscie:

int freq(const void *arg1, const void *arg2)
 {
  CH *Arg1 = (CH *)arg1;
  CH *Arg2 = (CH *)arg2;
 return (Arg2->fre - Arg1->fre);
 }