Cześć! Mam (prawie) napisany program, który jest bazą danych dla filmów. Wykonałem już praktycznie wszystkie pożądane przeze mnie funkcje, jednak nie mogę dojść do rozwiązania problemu z sortowaniem. Wybierając sortowanie po gatunku lub tytule nie dzieje się nic, a gdy odkomentuje sortowanie po dacie to wtedy program się nie skompiluje. Czy ktos ma pomysł w jaki sposób mógłbym "naprawić" te błędy?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 999
struct BazaFilmow
{
char Tytul[MAX];
char Gatunek[25];
int Data_Produkcji;
}DATA;
FILE *lista;
FILE *lista2;
int c;
void dodawanie()
{
struct BazaFilmow;
fflush(stdin);
printf("Podaj Tytul:\n");
scanf("%*c%[^\n]",DATA.Tytul);
gatunek:
printf("Podaj Gatunek:\n");
scanf("%*c%[^\n]",DATA.Gatunek);
if((strcmp(DATA.Gatunek, "Akcja")== 0) || (strcmp(DATA.Gatunek, "Animacja")== 0) || (strcmp(DATA.Gatunek, "Dokumentalny")== 0) || (strcmp(DATA.Gatunek, "Dramat")== 0) || (strcmp(DATA.Gatunek, "Fantasy")== 0) || (strcmp(DATA.Gatunek, "Horror")== 0) ||
(strcmp(DATA.Gatunek, "Komedia")== 0) || (strcmp(DATA.Gatunek, "Krotkometrazowy")== 0) || (strcmp(DATA.Gatunek, "Kryminal")== 0) || (strcmp(DATA.Gatunek, "Melodramat")== 0) || (strcmp(DATA.Gatunek, "Niemy")== 0) || (strcmp(DATA.Gatunek, "Przygodowy")== 0) ||
(strcmp(DATA.Gatunek, "Romans")== 0) || (strcmp(DATA.Gatunek, "Sci-Fi")== 0) || (strcmp(DATA.Gatunek, "Thriller")== 0))
{}
else
{
printf("Nieznany gatunek, sproboj jeszcze raz:\n");
goto gatunek;
}
data:
fflush(stdin);
puts("Podaj Date produkcji:");
scanf("%d",&DATA.Data_Produkcji);
if(DATA.Data_Produkcji <= 1800)
{
printf("Bledna data, sproboj jeszcze raz:\n");
goto data;
}
lista = fopen("lista.txt", "a");
fprintf(lista, "%s;%s;%d\n", DATA.Tytul, DATA.Gatunek, DATA.Data_Produkcji);
fclose(lista);
printf("Pomyslnie dodano film do bazy\n\n");
}
void list()
{
struct BazaFilmow;
char trybSortowania;
sortowanie:
puts("Wybierz tryb sortowania:[T]ytul, [G]atunek, [D]ata\nAby wyswietlic liste nacisnij [W]\nAby wrocic do poczatku wpisz [E]");
fflush(stdin);
scanf("%c", &trybSortowania);
if(trybSortowania == 'T'||'G'||'D')
{
switch(trybSortowania)
{
case 'T':
sortTytul();
goto sortowanie;
break;
case 'G':
sortGatunek();
goto sortowanie;
break;
case 'D':
sortRok();
goto sortowanie;
break;
case 'E':
system("cls");
return 0;
case 'W':
system("cls");
wyswietl();
break;
default:
printf("Nieznany tryb sortowania\n");
goto sortowanie;
}
}
}
void sortTytul()
{
struct BazaFilmow;
int i=0,j=0,n;
char schowek[MAX];
lista = fopen("lista.txt", "r");
fscanf(lista,"%s%[^;]%s%[^;]%d", DATA.Tytul, DATA.Gatunek, DATA.Data_Produkcji);
lista2 = fopen("wyjscie.txt", "a");
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
if(strcmp(DATA.Tytul[i],DATA.Tytul[j+1])>0)
{
strcpy(schowek,DATA.Tytul[i]);
strcpy(DATA.Tytul[i],DATA.Tytul[j]);
strcpy(DATA.Tytul[j],schowek);
}
}
fprintf(lista2, "%s\t\t\t\t\t\t%s\t\t\t%d\n",DATA.Tytul[j], DATA.Gatunek, DATA.Data_Produkcji);
puts("Sortowanie pomyslne");
fclose(lista);
fclose(lista2);
}
void sortGatunek()
{
struct BazaFilmow;
int i=0,j=0,n;
char schowek[MAX];
lista = fopen("lista.txt", "r");
fscanf(lista,"%s%[^;]%s%[^;]%d", DATA.Tytul, DATA.Gatunek, DATA.Data_Produkcji);
lista2 = fopen("wyjscie.txt", "a");
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
if(strcmp(DATA.Gatunek[i],DATA.Gatunek[j+1])>0)
{
strcpy(schowek,DATA.Gatunek[i]);
strcpy(DATA.Gatunek[i],DATA.Gatunek[j]);
strcpy(DATA.Gatunek[j],schowek);
}
}
fprintf(lista2, "%s\t\t\t\t\t\t%s\t\t\t%d\n",DATA.Tytul, DATA.Gatunek[j], DATA.Data_Produkcji);
puts("Sortowanie pomyslne");
fclose(lista);
fclose(lista2);
}
void sortRok()
{
struct BazaFilmow;
int i=0,j=0,n;
int schowek[MAX];
lista = fopen("lista.txt", "r");
fscanf(lista,"%s%[^;]%s%[^;]%d", DATA.Tytul, DATA.Gatunek, DATA.Data_Produkcji);
lista2 = fopen("wyjscie.txt", "a");
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
if(DATA.Gatunek[i]>DATA.Gatunek[j+1])
{
schowek=DATA.Data_Produkcji[i];
DATA.Data_Produkcji[i]=DATA.Data_Produkcji[j];
DATA.Data_Produkcji[j]=schowek;
}
}
fprintf(lista2, "%s\t\t\t\t\t\t%s\t\t\t%d\n",DATA.Tytul, DATA.Gatunek, DATA.Data_Produkcji[j]);
puts("Sortowanie pomyslne");
fclose(lista);
fclose(lista2);
}
void wyswietl()
{
lista2 = fopen("wyjscie.txt", "r");
puts("Tytul filmu:\t\t\t\t\tGatunek:\t\tRok produkcji:\n");
if(lista)
{
while ((c = getc(lista2)) != EOF)
putchar(c);
}
fclose(lista2);
}
int main()
{
char komenda[6];
printf("Witaj w Bazie filmow.\n");
poczatek:
puts("\nAby przejsc do listy filmow wpisz /lista.\nAby dodac film do bazy wpisz /dodaj.\nAby wyjsc z programu wpisz /exit");
printf("\nPodaj komende:\n");
fflush(stdin);
scanf("%s",komenda);
if(strcmp(komenda,"/dodaj")== 0)
{
system("cls");
dodawanie();
}
else if(strcmp(komenda,"/lista")== 0)
{
system("cls");
list();
}
else if(strcmp(komenda,"/exit")== 0)
{
exit(1);
}
else
{
puts("Nieznana komenda");
}
goto poczatek;
return 0;
}