Witam.
Mój program zczytuje z pliku liczby.txt pojedyncze linijki, a potem rozpoznaje czy jest to zwykły tekst, liczba dziesiętna (dziesiętna w notacji naukowej), dwójkowa, ósemkowa, szesnastkowa.Następnie drukuje je z odpowiednio wraz z tą informacją. Potem zamienia wszystko na system dziesiętny, segreguje te wg wartości w systemie dziesiętnym i drukuje. Program działa, ale mam 1 problem. Jak napisać funkcję (pewnie trzeba użyć jakieś wskaźniki) i jak taką funkcję wywołać, aby wywołać funkcję w 1 linijce, bo teraz to wywołuję funkcję dla każdej komórki struktury pojedynczo, a chciałbym ją wywyłać dla całej tablicy (zresztą widać to w mainie). Chyba wiadomo o co chodzi :)

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

struct Liczba {
        char tekst[20];
        char bity;
        int wartosc;
} l[100],a;

int linie=0;
void sortuj(struct Liczba *l){
     int i,j,min;
     for (i=0; i<linie-1; i++){
         min=i;
         for (j=i; j<linie; j++)
         if (l[j].wartosc<=l[min].wartosc) min=j;
     a=l[min];
     l[min]=l[i]; 
     l[i]=a;
     }
}
// zamiana liczb na system dziesiętny
void dec(struct Liczba *l){
	int i=0,r=0,j;
	 for (j=0; j<=linie; j++){
	l[j].wartosc=0;
	if(l[j].bity >4){
					int podstawa,prefix;
					if(l[j].bity == 5) {podstawa=16; prefix=2;}
					else if(l[j].bity == 9) {podstawa=8; prefix=1;}
					else if(l[j].bity == 17) {podstawa=2; prefix=2;}
    int dlugosc = strlen(l[j].tekst);
    
    for (i=dlugosc-1;i>=prefix;i--){
        if(l[j].tekst[i]>='a' && l[j].tekst[i]<='f')  r+=(l[j].tekst[i] - 'a' + 10) * (pow(podstawa,dlugosc-1-i)); // dla a-f
        else if(l[j].tekst[i]>='A' && l[j].tekst[i]<='F') r+=(l[j].tekst[i] - 'A' + 10) * (pow(podstawa,dlugosc-1-i)); // dla "A-F" 
        else if(l[j].tekst[i]>='0' && l[j].tekst[i]<='9') r+=(l[j].tekst[i] - '0')*(pow(podstawa,dlugosc-1-i)); // dla cyfr
        l[j].wartosc=r;
   }
}
   else if(l[j].bity==3){
        int dlugosc = strlen(l[j].tekst);
        for (i=0;i<dlugosc;i++){
            if(!(l[j].tekst[i]>='0' && l[j].tekst[i]<='9')) {l[j].wartosc=0; r=0; break;}
            r+=pow(10,dlugosc-1-i)*(l[j].tekst[i] - '0');
            }
            if(dlugosc==3)  l[j].wartosc=r+1;
            else l[j].wartosc=r;
   }
    else if(l[j].bity==0) l[j].wartosc=0;
}
            
}
void ZapiszdoPlikuTekstowego(struct Liczba l){
   FILE *plik = fopen ("liczby.txt","a");
   fprintf (plik, "%s\n",l.tekst); 
   fclose (plik);
  puts ("Tekst zostal zapisany do pliku zapis.txt");
}
 
void OdczytajzPlikuTekstowego(struct Liczba *l){
     int i=0,j=0;
     FILE *plik = fopen ("liczby.txt", "r");
     char linia [100];
     char temp [100];

     while(fgets(linia, 100, plik)){
                        strcpy(temp,linia);
                        linie++;
                        
                        int dlugosc = strlen(temp);
                        for(j=0;j<dlugosc;j++){
                                              if(temp[j]==10) temp[j]=0;
                                               }
                        strcpy(l[i].tekst,temp);
                        i++;
     }
     fclose(plik);
}
void WyswietlLiczbe(struct Liczba *l){
     if(l->bity==0) printf("Tekst \"%s\" nie jest liczba.\n",l->tekst);
     else if(l->bity==3) printf("%s\tsystem dziesietny\n",l->tekst);
     else if(l->bity==5) printf("%s\tsystem szesnastkowy\n",l->tekst);
     else if(l->bity==9) printf("%s\tsystem osemkowym\n",l->tekst);
     else if(l->bity==17) printf("%s\tsystem dwojkowy\n",l->tekst);
}
              
void PobierzLiczbe(struct Liczba *l){   
    int i,spacje=1,dziesietna=1,szesnastkowa=1,osemkowa=1,dwojkowa=1;
    l->bity = 0;
    int dlugosc = strlen(l->tekst);
    
 // szukanie spacji i Tab   //
    for (i=0; i<dlugosc; i++)	
    if(l->tekst[i]==32 || l->tekst[i]==9) spacje = 1;
    spacje = 0;
    
//  dziesietne //
    int kropka=0,Ee=0,znak=0,pozkropka=0,pozEe=0,pozznak=0; 
    
    if((l->tekst[0]=='0' && l->tekst[1]=='0') || (l->tekst[0]=='0' && l->tekst[1]!=0) || l->tekst[0]==0) dziesietna = 0; // tekst musi mieć, jakiś znak i nie mogą to być 2 zera na poczatku
    for (i=0; i<dlugosc; i++){
        if(l->tekst[i]=='.'){                //liczenie ile kropek i zczytanie jej indeksu
                         kropka++; 
                         if(kropka==2){// 1 kropka
                                       dziesietna = 0; 
                                       break;
                         }
                         pozkropka=i;
        }
        if(l->tekst[i]=='e' || l->tekst[i]=='E'){ //liczenie ile liter "E" lub "e" i zczytanie ich indeksu
                         Ee++;
                         if(Ee==2){// 1 znak notacji 
                                   dziesietna = 0;
                                   break;
                         }
                         pozEe=i;
        }                
        if(l->tekst[i]=='+' ||  l->tekst[i]=='-'){  //liczenie ile znaków "+" lub "-" i zczytanie ich indeksu 
                         znak++;
                         if(znak==2){ // 1 znak liczby
                                     dziesietna = 0;
                                     break;
                         }
                         pozznak=i;
        }
    }
    
    if(kropka+Ee+znak==1) dziesietna = 0; // l->tekst ma w sobie 1 znak nie będą cy licbą
    else if(Ee+znak==2 && kropka==0){
          //może to być liczba z całkowitą podstawą np.: 35E-15
          if(pozEe==0 || (pozznak-pozEe)!=1 || pozznak==dlugosc-1) dziesietna = 0;}
          else if(kropka+Ee+znak==3){
               // może to być liczba z niecałkowitą podstawą np.: 10.67e+2
               if(pozkropka==0 || (pozznak-pozEe)!=1 || (pozEe-pozkropka)==1 || pozznak==dlugosc-1 || !((pozznak>pozEe)&&(pozEe>pozkropka))) dziesietna=0;
               }
               // . nie na początku     +/- przed e/E        po . jest  liczba    po +/- jest liczba             najpierw . potem e/E oraz +/-
    else if(kropka+Ee+znak==0){ //tekst może być zwykłą liczbą
                           for (i=0; i<dlugosc; i++)
                           if(!(isdigit(l->tekst[i]))) dziesietna = 0; // sprawdzenie czy występują tylko cyfry "0-9"
    }
    
// szesnastkowe	//
    if(l->tekst[2]==0 || l->tekst[0]!='0' || !(l->tekst[1]=='X' || l->tekst[1]=='x') || (l->tekst[1]!='X' && l->tekst[1]!='x')) szesnastkowa = 0; //pierwszy znak to "0", drugi znak to "x" lub "X"
    for (i=2; i<dlugosc; i++)
        if(!isxdigit(l->tekst[i])){szesnastkowa = 0; break;} // pozostałe znaki to cyfry "0-9" lub litery "A-F" lub "a-f"
    
// ósemkowe //
    if(l->tekst[0]!='0' || l->tekst[1]==0) osemkowa = 0; // pierwszy znak to "0", conajmniej 2 znaki
    
    for (i=1; i<dlugosc; i++)
        if(!(l->tekst[i]>47 && l->tekst[i]<56)){  // sprawdz czy znaki to cyfry "0-7"
        osemkowa = 0; 
        break;
        }
       
// dwójkowe //
    if(l->tekst[0]!='0' || l->tekst[1]!='b' || l->tekst[2]==0) dwojkowa = 0; // pierwszy znak to "0"  drugi znak to "b"
    
    for (i=2; i<dlugosc; i++)
        if(!(l->tekst[i]=='0' || l->tekst[i]=='1')){ // cyfry "0-1"
        dwojkowa = 0; 
        break;
        }
// przydzielanie bitów	//
     if(spacje==0){
                   if(dziesietna!=0) l->bity = 3;
                   else if(szesnastkowa!=0) l->bity = 5;
                   else if(osemkowa!=0) l->bity = 9;
                   else if(dwojkowa!=0) l->bity = 17;
                 }
}

int main(){
    int i;
	
    OdczytajzPlikuTekstowego(l);
    for (i=0;i<linie;i++){
                          PobierzLiczbe(&l[i]);
                          WyswietlLiczbe(&l[i]);
                          dec(&l[i]);
                          }  
    puts("\n\nZapis dziesietny\tliczba\n");     
    sortuj(l);      
    for(i=0;i<linie;i++)
    if(l[i].wartosc!=0) printf("%d\t\t\t%s\n",l[i].wartosc, l[i].tekst); // nie drukuje liczb w notacji naukowej

    printf("\n\nWybierz 1, aby dodac tekst do bazy lub inny klawisz, aby zakonczyc program: ");
    
    int x;
    scanf("%d", &x);
    if(x==1) {
             printf("\nWprowadz dowolny tekst: ");
	         scanf("%s",l->tekst);
	         system("pause");
	         ZapiszdoPlikuTekstowego(l[linie+1]);
          }
    else  system("pause");
    
    return 0;
}