Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Programowanie c pomoc

26.01.2014 18:47
1
Żbikos
18
Chorąży

Programowanie c pomoc

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

26.01.2014 18:53
maviozo
2
odpowiedz
maviozo
226
autor zdjęć

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();

26.01.2014 18:56
3
odpowiedz
Żbikos
18
Chorąży

Dzięki teraz wszystko działa :) Dziękuje za pomoc.

Forum: Programowanie c pomoc