ANSI C:Sortowanie babelkowe struktur - pomocy!

Witam!

mam problem z moim programem…

dostalem takie zadanie:

zaimplementowac algorytm sortowania babelkowego struktur po roznych

kryteriach. zaimplementowac obsluge bledow. odczyt/zapis do pliku.

i kod wyglada jak narazie tak…

##include 

#include 

#include 


#define WYPIS "wypis.txt" /* plik do ktorego prog przepisuje dane */

#define DATA_FILE "baza.txt" /* plik z danymi */

#define MAX_WPIS 100 /* maksymalna ilosc wpisów */

#define MAX_IMIE 20 /* maksymalne dlugosci */

#define MAX_NAZW 30 /* wpisów */



typedef struct 

{

    char imie[MAX_IMIE];

    char nazwisko[MAX_NAZW];

    int tel;

}Wpis;


typedef struct

{

    Wpis baza_danych[MAX_WPIS];

    int ilosc_wpisow;

}Baza_wpisow;


Baza_wpisow ksiazka_tel;


void czysc_pamiec(Baza_wpisow *baza)

{

    int i;

    for(i=0;i
	{

	    memset(baza->baza_danych[i].imie,0,MAX_IMIE);

	    memset(baza->baza_danych[i].nazwisko,0,MAX_NAZW);

	    baza->baza_danych[i].tel=0;

	}

    baza->ilosc_wpisow=0;

}

/*int wiersze(char *filename)

{

    FILE *fd = fopen(filename,"r");

    int i, j=0;

    char c;

    for(i=0; (c=fgetc(fd))!=EOF;i++) 

         if(c=='\n') 

              j++;

    fclose(fd);

    printf("\nilosc wyrazow to %d, a ilosc linijek to %d\n", i, j);

    if (i>0)

       return j;

    else

        return 0;         

}*/

int wczytaj_baze(char *filename)

{

    FILE *fp = fopen(filename,"r");

    int i/*, il_wierszy*/;

    /*il_wierszy=wiersze(filename); */   

    /*printf("\nil wierszy = %d\n", il_wierszy); */

    if(fp == NULL)

        {

	        printf("\nnie ma pliku z danymi\n");

	        return 0;

	    }


    for(i=0;i
        {

            if(fscanf(fp,"%s %s %d",ksiazka_tel.baza_danych[i].imie,ksiazka_tel.baza_danych[i].nazwisko, &ksiazka_tel.baza_danych[i].tel) == -1)

            break;

        }

    ksiazka_tel.ilosc_wpisow = i;

    if (ksiazka_tel.ilosc_wpisow == 0)

	    {

            printf("\nbaza jest pusta\n");

	        return 0;

	    }


    /*for(i=0;i<=ksiazka_tel.ilosc_wpisow;i++)

        {

            if (isdigit(&ksiazka_tel.baza_danych[i].tel) == 0)

                {

                    printf("\nniepoprawna baza\n");

                    return 0;

                }

            else

                {

                    printf("\npoprawna baza\n");

                    return 1; 

                }

        }*/


    fclose(fp);

    return 1;

}


void Sortowanie(Baza_wpisow *strona,int x)

{

     int zmiana;

     int i,j;

     Wpis rob;

     for(i=0;iilosc_wpisow-1;i++)

         {

             zmiana=0;

             for(j=0;j< strona->ilosc_wpisow-1-i ;j++)

                 {

                     if( x == 1 )

                         {

                             rob = strona->baza_danych[j];

			                 strona->baza_danych[j] = strona->baza_danych[j+1];

            			     strona->baza_danych[j+1] = rob;

                             zmiana=1;

                         }

                 }

             if(zmiana == 0) 

                 break;

         } 

}


int kryterium_numertel(Wpis pierwszy,Wpis drugi)

{

    if(pierwszy.tel < drugi.tel)

        return 1;

    else 

        return 0;

}


void kryterium_nazwisko(Wpis pierwszy,Wpis drugi, int j)

{

Wpis rob;

/* printf ("\npierwszy %d %c drugi %d %c\n", pierwszy.imie[0] +'\0',pierwszy.imie[0], drugi.imie[0] +'\0', drugi.imie[0]); */


    if (pierwszy.nazwisko[0] +'\0' < drugi.nazwisko[0] +'\0') 

    { 

        rob = ksiazka_tel.baza_danych[j];

        ksiazka_tel.baza_danych[j] = ksiazka_tel.baza_danych[j+1];

        ksiazka_tel.baza_danych[j+1] = rob;


     /* printf ("\npierwszy po %d %c drugi po %d %c\n", pierwszy.imie[0] +'\0',pierwszy.imie[0], drugi.imie[0] +'\0',drugi.imie[0]); */

    }

    else if (pierwszy.nazwisko[0] +'\0' == drugi.nazwisko[0] +'\0')

        if (pierwszy.nazwisko[1] +'\0' < drugi.nazwisko[1] +'\0')

        { 

            rob = ksiazka_tel.baza_danych[j];

            ksiazka_tel.baza_danych[j] = ksiazka_tel.baza_danych[j+1];

            ksiazka_tel.baza_danych[j+1] = rob;

        } 

}


void kryterium_imie(Wpis pierwszy,Wpis drugi, int j)

{

Wpis rob;

/* printf ("\npierwszy %d %c drugi %d %c\n", pierwszy.imie[0] +'\0',pierwszy.imie[0], drugi.imie[0] +'\0', drugi.imie[0]); */


    if (pierwszy.imie[0] +'\0' < drugi.imie[0] +'\0') 

    { 

        rob = ksiazka_tel.baza_danych[j];

        ksiazka_tel.baza_danych[j] = ksiazka_tel.baza_danych[j+1];

        ksiazka_tel.baza_danych[j+1] = rob;


     /* printf ("\npierwszy po %d %c drugi po %d %c\n", pierwszy.imie[0] +'\0',pierwszy.imie[0], drugi.imie[0] +'\0',drugi.imie[0]); */

    }

    else if (pierwszy.imie[0] +'\0' == drugi.imie[0] +'\0')

        if (pierwszy.imie[1] +'\0' < drugi.imie[1] +'\0')

        { 

            rob = ksiazka_tel.baza_danych[j];

            ksiazka_tel.baza_danych[j] = ksiazka_tel.baza_danych[j+1];

            ksiazka_tel.baza_danych[j+1] = rob;

        } 

}


/*void sprawdzenie(void)

{

    int i;

    for(i=0;i
    printf("%s %s %d",ksiazka_tel.baza_danych[i].imie,ksiazka_tel.baza_danych[i].nazwisko, ksiazka_tel.baza_danych[i].tel);

}*/


int zapisz_baze(char *filename)

{

    int i;

    FILE *fp = fopen(filename,"w");


    if(fp == NULL)

        {

            printf("\nnie mozna otworzyc pliku do zapisu\n");

            fp = fopen(filename,"a");

            if(fp == NULL)

                {

                    printf("\nnie mozna nic dopisac do pliku\n");

                    fp = fopen (filename, "r");

                    if ( fp != NULL)

                        printf("\nistnieje juz taki plik i jest tylko do odczytu\n");

                    return 0;

                }

        } 


    for(i=0;i
       {

           fprintf(fp,"\n%s %s %d\n",ksiazka_tel.baza_danych[ksiazka_tel.ilosc_wpisow-i-1].imie,ksiazka_tel.baza_danych[ksiazka_tel.ilosc_wpisow-i-1].nazwisko,ksiazka_tel.baza_danych[ksiazka_tel.ilosc_wpisow-i-1].tel);

       }

    fclose(fp);

    return 1;

}



int main(int argc, char*argv[])

{

    int i, x;

    if (argc != 2)

        {

            printf("\nniepoprawna ilosc argumentow wywolania\n");

            return 0;

        }

    czysc_pamiec(&ksiazka_tel);

    if(!wczytaj_baze(DATA_FILE))

        {

            printf("\ntrzeba to chyba naprawic? ;)\n");

            return 0;

        }

    switch (*argv[1])

    {

           case '1':

                for(i=0;i<=ksiazka_tel.ilosc_wpisow;i++)

                {

                kryterium_imie(ksiazka_tel.baza_danych[i],ksiazka_tel.baza_danych[i+1], i);

                /* Sortowanie(&ksiazka_tel, x); */

                }

                break;

           case '2':

                for(i=0;i<=ksiazka_tel.ilosc_wpisow;i++)

                {

                kryterium_nazwisko(ksiazka_tel.baza_danych[i],ksiazka_tel.baza_danych[i+1], i);

                /* Sortowanie(&ksiazka_tel, x); */

                }

                break;

           case '3':

                for(i=0;i<=ksiazka_tel.ilosc_wpisow;i++)

                {

                x=kryterium_numertel(ksiazka_tel.baza_danych[i],ksiazka_tel.baza_danych[i+1]);

                Sortowanie(&ksiazka_tel, x);

                }

                break;

           default:

                printf("\nargument wywolania jest niewlasciwy\nmozliwe argumenty to:\n");

                printf("\n1 - dla sortowania po imieniu\n2 - po nazwisku\n3 - po numerze telefonu\n");

                break;

    }

    zapisz_baze(WYPIS);

    /*sprawdzenie(); */

    return 1;

}

a wiec do rzeczy…

problem nr 1) caly czas nie wiem jak sprawdzic czy poprawnie sie wczytuje nr telefonu… (poczynilem nieudane proby z isdigit…)

problem nr 2) 198 E:\PW\prmy\pro3\prog2.c syntax error before “Baza_wpisow”

problem nr 3) E:\PW\prmy\pro3\prog2.c In function `Sortowanie’:

106 E:\PW\prmy\pro3\prog2.c incompatible types in assignment

czyli ze sie cos wykrzacza w samym sortowaniu babelkowym dla struktury rob;

z gory dzieki za pomoc!

pozdrawiam.

edit: z 3 chyba sobie poradzilem… ale jeszcze prosze sprawdzcie czy to ma sens ; )

edit: z 2 tez sobie poradzilem.

program dziala (caly czas pkt 1 jest aktualny…) jednak sortuje tylko dla malych ilosci wpisow… pojecia zielonego nie mam czemu… tak wiec ponawiam prosbe, niech ktos spojrzy na to i podpowie, projekt jest na jutro (poniedzialek) !