Recenzja The Blood of DawnwalkerInteraktywna mapa Gothic RemakePoradnik do DawnwalkeraWszystko o Wiedźmin 3: Dziki Gon - Remaster
Szukaj...
Kolorystyka
Wyświetlanie

GRYOnline.pl:

Facebook GRYOnline.pl Instagram GRYOnline.pl X GRYOnline.pl TikTok GRYOnline.pl Podcast GRYOnline.pl LinkedIn GRYOnline.pl Forum GRYOnline.pl

tvgry.pl:

YouTube tvgry.pl TikTok tvgry.pl Instagram tvgry.pl Discord tvgry.pl Facebook tvgry.pl

Programowanie c pomoc

Forum Rozmawiamy
Odpowiedz
26.01.2014 18:47
1
odpowiedz
Ż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
mav
2
odpowiedz
mav
253
wesoły ludek

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 Forum Rozmawiamy
Odpowiedz

GRYOnline.pl:

Facebook GRYOnline.pl Instagram GRYOnline.pl X GRYOnline.pl TikTok GRYOnline.pl Podcast GRYOnline.pl LinkedIn GRYOnline.pl Forum GRYOnline.pl

tvgry.pl:

YouTube tvgry.pl TikTok tvgry.pl Instagram tvgry.pl Discord tvgry.pl Facebook tvgry.pl