Witam.
Mam przerobiony program w którym wyskakuje mi błąd " [Linker error] undefined reference to `szukaj_wg_cena' "
i "ld returned 1 exit status "
tutaj mam kod programu
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAKS_M 20
#define MAKS_R 10
#define MAKS_P 200
struct _gra
char Nazwa[ MAKS_M ];
char Wydawca[ MAKS_M ];
short int rok_wydania;
float cena;
float ilosc;
char nr_kat [ MAKS_R ];
;
typedef struct _gra gra;
gra gry[ MAKS_P ];
const char nazwa_pliku[] = "gry.dat";
short int lb_gier;
void inicjalizacja( void );
void zakonczenie( void );
void menu( void );
void dopisz_gre( void );
void pokaz_gre( void );
void szukaj_gry( void );
void usun_gre( void );
void usun_wszystko( void );
void z_pliku_do_tablicy( void );
void z_tablicy_do_pliku( void );
void czytaj_info( gra * info );
void pokaz_info( const gra * info );
void usun_z_ewidencji( int nr );
void szukaj_wg_nazwa( void );
void szukaj_wg_ilosc( void );
void przewin_ekran( void );
int main()
int opcja;
inicjalizacja();
do
menu();
opcja = tolower( getchar() ); fflush( stdin );
switch( opcja )
case 'd' : dopisz_gre();
break;
case 'p' : pokaz_gre();
break;
case 's' : szukaj_gry();
break;
case 'u' : usun_gre();
break;
case 'w' : usun_wszystko();
break;
while( opcja != 'k' );
zakonczenie();
return EXIT_SUCCESS;
void inicjalizacja( void )
przewin_ekran();
puts( "Swiat Gier - Baza gier. Wersja demo." ) ;
z_pliku_do_tablicy();
if( lb_gier == 0 )
printf( "\nBaza jest pusta." );
else
printf( "\nLiczba wpisanych gier: %d.", lb_gier );
printf( "\nNacisnij Enter by rozpoczac program..." );
( void )getchar(); fflush( stdin );
void zakonczenie( void )
przewin_ekran();
z_tablicy_do_pliku();
printf( "\nNacisnij Enter by zakonczyc program..." );
( void )getchar();
void menu( void )
przewin_ekran();
printf( "\n\nBaza Gier:" );
printf( "\n D - dopisz gre,\n P - pokaz gry,\n S - szukaj gier,");
printf( "\n U - usun gre,\n W - usun wszystkie,\n K - koniec.\n?>" );
void dopisz_gre( void )
int jeszcze_jeden;
if( lb_gier < MAKS_P )
do
przewin_ekran();
czytaj_info( &gry[ lb_gier ] );
lb_gier++;
printf( "\nCzy wprowadzasz nastepna gre? (t/n): " );
jeszcze_jeden = ( tolower( getchar() ) == 't' );
fflush( stdin );
while( jeszcze_jeden && lb_gier < MAKS_P );
if( lb_gier == MAKS_P )
printf( "\nBaza pelna, [Enter] >> powrot do menu." );
( void )getchar();
void pokaz_gre( void )
int nr;
if( lb_gier == 0 )
printf( "\nBaza jest pusta." );
for( nr = 0; nr < lb_gier; nr++ )
przewin_ekran();
printf( "\nDane gry nr: %d\n", nr + 1 );
pokaz_info( &gry[ nr ] );
if( nr < lb_gier - 1 )
printf( "\n\n[Enter] = Nastepna gra >>" );
else
printf( "\n\n[Enter] = Zakoncz przegladanie bazy" );
( void )getchar(); fflush( stdin );
void szukaj_gry( void )
int kryterium;
printf( "\nSzukaj wg.:\n N - nazwa,\n C - cena\n?>" );
kryterium = tolower( getchar() );
fflush( stdin );
switch( kryterium )
case 'N' : szukaj_wg_nazwa();
break;
case 'C' : szukaj_wg_cena();
break;
void usun_gre( void )
int nr;
if( lb_gier == 0 )
printf( "\nBaza jest pusta." );
for( nr = 0; nr < lb_gier; nr++ )
przewin_ekran();
printf( "\nDane gry nr: %d\n", nr + 1 );
pokaz_info( &gry[ nr ] );
printf( "\nCzy chcesz usunac ta gre? (t/n) ");
if( tolower( getchar() ) == 't' )
fflush( stdin );
printf( "Jestes tego pewien? (t/n) " );
if( tolower( getchar() ) == 't' )
fflush( stdin );
printf( "Usuwanie gry %s...", &gry[ nr ].nr_kat );
usun_z_ewidencji( nr );
fflush( stdin );
if( nr < lb_gier - 1 )
printf( "\n\n[Enter] = Nastepna gra >>" );
else
printf( "\n\n[Enter] = Zakoncz usuwanie" );
( void )getchar();
void usun_wszystko( void )
if( lb_gier == 0 )
printf( "\nBaza jest pusta." );
else
printf( "UWAGA! Czy rzeczywiscie chcesz usunac wyszystkie gry? (t/n) ");
if( tolower( getchar() ) == 't' )
fflush( stdin );
printf( "Jestes tego pewnien? (t/n) " );
if( tolower( getchar() ) == 't' )
fflush( stdin );
lb_gier = 0;
fflush( stdin );
void z_pliku_do_tablicy( void )
FILE * plik;
printf( "\nLadowanie bazy..." );
if( ( plik = fopen( nazwa_pliku, "gry" ) ) == NULL )
printf( "Plik bazy gier nie istnieje." );
printf( "\nZakladam nowa, pusta baze gier..." );
if( ( plik = fopen( nazwa_pliku, "gry2" ) ) == NULL )
printf( " blad tworzenia pliku." );
else
fclose( plik );
printf( " sukces." );
else
int n;
n = fread( &lb_gier, sizeof( lb_gier ), 1, plik );
if( n != 1 )
printf( "\nBlad w pliku bazy gier." );
n = fread( gry, sizeof( gry ), lb_gier, plik );
if( n != lb_gier )
printf( "\nBlad w pliku bazy gier." );
fclose( plik );
void z_tablicy_do_pliku( void )
FILE * plik;
printf( "\nZapisywanie bazy..." );
if( ( plik = fopen( nazwa_pliku, "gry2" ) ) == NULL )
printf( " blad aktualizacji pliku." );
else
int n;
n = fwrite( &lb_gier, sizeof( lb_gier ), 1, plik );
if( n != 1 )
printf( "\nBlad zapisu pliku bazy gier." );
if( lb_gier > 0 )
n = fwrite( gry, sizeof( gra ), lb_gier, plik );
if( n != lb_gier )
printf( "\nBlad w pliku baz danych." );
fclose( plik );
void czytaj_info( gra * info )
char bufor[ 128 ];
printf( "\nPodaj dane gry" );
printf( "\nNazwa: " );
gets( bufor );
if( strlen( bufor ) >= MAKS_M )
bufor[ MAKS_M - 1 ] = '\0';
strcpy( info->Nazwa, bufor );
printf( "Wydawca: " );
gets( bufor );
if( strlen( bufor ) >= MAKS_M )
bufor[ MAKS_M - 1 ] = '\0';
strcpy( info->Wydawca, bufor );
printf( "Rok wydania: " );
gets( bufor );
info->rok_wydania = atoi( bufor );
printf( "Cena: " );
gets( bufor );
info->cena = atof( bufor );
printf( "Ilosc: " );
gets( bufor );
info->ilosc = atof( bufor );
printf( "Numer katalogu: " );
gets( bufor );
if( strlen( bufor ) >= MAKS_R )
bufor[ MAKS_R - 1 ] = '\0';
strcpy( info->nr_kat, bufor );
void pokaz_info( const gra * info )
printf( "\n Nazwa: %s", info->Nazwa );
printf( "\n Wydawca: %s", info->Wydawca );
printf( "\n Rok wydania: %d", info->rok_wydania );
printf( "\n Cena: %g", info->cena );
printf( "\n Ilosc: %s", info->ilosc );
printf( "\nNr Nr katologu: %s", info->nr_kat );
void usun_z_ewidencji( int nr )
if( nr >= 0 && nr < lb_gier )
for( ; nr < lb_gier - 1; nr++ )
gry[ nr ] = gry[ nr + 1 ];
lb_gier--;
void szukaj_wg_nazwa( void )
int nr, znaleziono = 0;
char bufor[ 128 ];
printf( "\nPodaj nazwe: " );
gets( bufor );
for( nr = 0; nr < lb_gier; nr++ )
if( strcmp( gry[ nr ].Nazwa, bufor ) == 0 )
znaleziono = 1;
printf( "\nDane gry nr: %d\n", nr + 1 );
pokaz_info( &gry[ nr ] );
if( nr < lb_gier - 1 )
printf( "\n\n[Enter] = Nastepna gra >>" );
else
printf( "\n\n[Enter] = Zakoncz przeglad" );
( void )getchar();
if( ! znaleziono )
printf( "\nBrak takich gier\n[Enter] = Zakoncz przeglad" );
( void )getchar();
void szukaj_wg_ilosc( void )
int nr, znaleziono = 0;
float ilosc;
char bufor[ 128 ];
printf( "\nPodaj ilosc: " );
gets( bufor );
ilosc = atof( bufor );
if( ilosc<= 0 || ilosc > 300000 )
printf( "\nNie szukam gry z taka ilosc egzemplarzy." );
return;
printf( "\nSzukam gry z iloscia %g.",ilosc );
for( nr = 0; nr < lb_gier; nr++ )
if( gry[ nr ].ilosc <= ilosc )
znaleziono = 1;
printf( "\nDane gry nr: %d\n", nr + 1 );
pokaz_info( &gry[ nr ] );
if( nr < lb_gier - 1 )
printf( "\n\n[Enter] = Nastepna gra >>" );
else
printf( "\n\n[Enter] = Zakoncz przeglad" );
( void )getchar();
if( ! znaleziono )
printf( "\nBrak takich gier\n[Enter] = Zakoncz przeglad" );
( void )getchar();
void przewin_ekran( void )
int liczba_linii = 25;
while( liczba_linii-- > 0 )
putchar( '\n' );
Czy ktoś może mi pomóc znaleźć błąd bo już nie wiem gdzie on jest... z góry dzięki
Nigdzie nie zdefiniowałeś takiej funkcji, to się kompilator pruje.
Nie wiem, skąd zaskoczenie....
W funkcji szukaj_gry( void )
masz:
case 'C' : szukaj_wg_cena();