• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

program v jazyku C

Started by eMCeee89, 16.05.2009, 17:13:25

« predchdzajce - alie »

eMCeee89

ja mam na vas jednu otazku. mozno je to banalna vec(otazka 1-2 riadkov), no neviem si pomoct. mam program uz napisany.vsetko bezi, no rad by som vedel ako by som mohol do hlavnej funkcie (main) vlozit taky prikaz, aby mi automaticky po spusteni programu zavolal nejaku funkciu. konkretne funkciu nacitaj, aby program hned po spusteni automaticky nacital udaje zo suboru "zoznam.dat". za odpovede vopred dakujem...
a tu je zdrojak:
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#define MAX_LENGTH 30
#define COUNT_ITEM 20
struct PARAM
{
char *pchMeno;
char *pchPriezvisko;
char *pchRok;
char *pchKlub;
char *pchDisc;
char *pchKat;
};
struct PARAM *g_Param[COUNT_ITEM];
FILE *g_file;
void Vypis( int nNumRec )
{
int i;
for( i = 0; i < nNumRec; i++ )
{
printf( "[%d] %s %s %s %s %s %s\n", i,
g_Param[i]->pchMeno,
g_Param[i]->pchPriezvisko,
g_Param[i]->pchRok,
g_Param[i]->pchKlub,
g_Param[i]->pchDisc,
g_Param[i]->pchKat);
}
}
void FreeMem( int nDelRec )
{
free( g_Param[nDelRec]->pchMeno );
free( g_Param[nDelRec]->pchPriezvisko );
free( g_Param[nDelRec]->pchRok );
free( g_Param[nDelRec]->pchKlub );
free( g_Param[nDelRec]->pchDisc );
free( g_Param[nDelRec]->pchKat );
free( g_Param[nDelRec]);
}
void Pridaj( int *pnNumRec )
{
if( *pnNumRec < COUNT_ITEM )
{
g_Param[*pnNumRec] = (struct PARAM *) malloc(sizeof(struct PARAM));
g_Param[*pnNumRec]->pchMeno = (char*) malloc(MAX_LENGTH);
printf( "Meno : ");
scanf( "%s", g_Param[*pnNumRec]->pchMeno );
g_Param[*pnNumRec]->pchPriezvisko = (char*) malloc(MAX_LENGTH);
printf( "Priezvisko : ");
scanf( "%s", g_Param[*pnNumRec]->pchPriezvisko );
g_Param[*pnNumRec]->pchRok = (char*) malloc(MAX_LENGTH);
printf( "Rok narodenia : ");
scanf( "%s", g_Param[*pnNumRec]->pchRok );
g_Param[*pnNumRec]->pchKlub = (char*) malloc(MAX_LENGTH);
printf( "Klub : ");
scanf( "%s", g_Param[*pnNumRec]->pchKlub );
g_Param[*pnNumRec]->pchDisc = (char*) malloc(MAX_LENGTH);
printf( "Disciplina : ");
scanf( "%s", g_Param[*pnNumRec]->pchDisc );
g_Param[*pnNumRec]->pchKat = (char*) malloc(MAX_LENGTH);
printf( "Kategoria : ");
scanf( "%s", g_Param[*pnNumRec]->pchKat );
(*pnNumRec)++;
}
else
{
printf( "Zoznam je plny" );
}
}
void Zmaz(int *pnNumRec)
{
int i;
int nRecDel;
Vypis( *pnNumRec );
if( *pnNumRec != 0 )
{
printf( "Zadaj cislo zaznamu ktory chces zmazat : " );
scanf( "%d", &nRecDel );
for( i = nRecDel; i < ((*pnNumRec)-1); i++ )
{
strcpy( g_Param[i]->pchMeno,g_Param[i+1]->pchMeno);
strcpy( g_Param[i]->pchPriezvisko,g_Param[i+1]->pchPriezvisko);
strcpy( g_Param[i]->pchRok,g_Param[i+1]->pchRok);
strcpy( g_Param[i]->pchKlub,g_Param[i+1]->pchKlub);
strcpy( g_Param[i]->pchDisc,g_Param[i+1]->pchDisc);
strcpy( g_Param[i]->pchKat,g_Param[i+1]->pchKat);
}
if ((*pnNumRec)-1==0)
{
FreeMem( 0 );
}
else
{
FreeMem( (*pnNumRec)-1 );
}
(*pnNumRec)--;
}
else
{
printf( "!!! Prazdny zoznam !!!\n" );
}
}
void Zotried(int nNumRec)
{
int i;
int j;
struct PARAM *helpParam;
for( i = 0; i < nNumRec-1; i++)
{
for( j = i+1; j < nNumRec; j++ )
{
if( strcmp( g_Param[j]->pchDisc, g_Param[i]->pchDisc ) < 0 )
{
helpParam = g_Param[j];
g_Param[j] = g_Param[i];
g_Param[i] = helpParam;
}
}
}
}
void Nacitaj( int *pnNumRec )
{
int nRet;
int i;
for( i = 0; i < *pnNumRec; i++ )
{
FreeMem( i );
}
*pnNumRec = 0;
g_file = fopen( "zoznam.dat", "r" );
do
{
if( *pnNumRec < COUNT_ITEM )
{
g_Param[*pnNumRec] = (struct PARAM *) malloc(sizeof(struct PARAM));
g_Param[*pnNumRec]->pchMeno = (char*) malloc(MAX_LENGTH);
g_Param[*pnNumRec]->pchPriezvisko = (char*) malloc(MAX_LENGTH);
g_Param[*pnNumRec]->pchRok = (char*) malloc(MAX_LENGTH);
g_Param[*pnNumRec]->pchKlub = (char*) malloc(MAX_LENGTH);
g_Param[*pnNumRec]->pchDisc = (char*) malloc(MAX_LENGTH);
g_Param[*pnNumRec]->pchKat = (char*) malloc(MAX_LENGTH);
nRet = fscanf( g_file, "%s\t%s\t%s\t%s\t%s\t%s\n",
g_Param[*pnNumRec]->pchMeno,
g_Param[*pnNumRec]->pchPriezvisko,
g_Param[*pnNumRec]->pchRok,
g_Param[*pnNumRec]->pchKlub,
g_Param[*pnNumRec]->pchDisc,
g_Param[*pnNumRec]->pchKat);
if( nRet != EOF )
{
(*pnNumRec)++;
}
else
{
FreeMem( *pnNumRec );
// (*pnNumRec)--;
}
}
else
{
printf( "Zoznam je plny" );
break;
}
}while( nRet != EOF );
fclose( g_file );
}
void Uloz( int nNumRec )
{
int i;
g_file = fopen( "zoznam.dat", "w" );
if( g_file == NULL )
{
printf("nemozem zapisat");
}
else
{
for( i = 0; i < nNumRec; i++ )
{
fprintf( g_file, "%s\t%s\t%s\t%s\t%s\t%s\n",
g_Param[i]->pchMeno,
g_Param[i]->pchPriezvisko,
g_Param[i]->pchRok,
g_Param[i]->pchKlub,
g_Param[i]->pchDisc,
g_Param[i]->pchKat);
}
fclose( g_file );
}
}
int main(int argc, char *argv[]){
char chChoice;
int nNumRec;
int i;
nNumRec = 0;
g_file = fopen( "zoznam.dat", "r" );
do
{
printf( "\n**************** MENU ****************\n" );
printf( "[1] Pridaj zaznam\n[2] Zmaz zaznam\n[3] Zotried zoznam\n[4] Vypis zoznam\n" );
printf( "[5] Uloz do suboru\n[6] Nacitaj zo suboru\n[9] Ukonci program\n" );
printf( "\nZadaj volbu : " );
scanf( "%s", &chChoice );
printf( "\n" );
switch( chChoice )
{
case '1': Pridaj( &nNumRec );
break;
case '2': Zmaz( &nNumRec );
break;
case '3': Zotried( nNumRec);
break;
case '4': Vypis( nNumRec );
break;
case '5': Uloz( nNumRec );
break;
case '6': Nacitaj( &nNumRec );
break;
}
}
while( chChoice != '9' );
printf( "\n**************** MENU ****************\n" );
printf( "[1] Pridaj zaznam\n[2] Zmaz zaznam\n[3] Zotried zoznam\n[4] Vypis zoznam\n" );
printf( "[5] Uloz do suboru\n[6] Nacitaj zo suboru\n[9] Ukonci program\n" );
printf( "\nZadaj volbu : " );
scanf( "%s", &chChoice );
printf( "\n" );
for( i = 0; i < nNumRec; i++ )
{
FreeMem( i );
}
}

hbm


- funkciu zavolas prikazom Nacitaj( &nNumRec );
- to otvaranie suboru v main je ti zbytocne
- testovat subor na NULL pri otvarani pomocou "w" -rite a netestovat pri "r" -ead je tiez dost nelogicke podla mna
    bo pri write ak subor nieje tak sa vytvori novy.

viac som sa do toho nepozeral, uz som take videl a nebolo to velmo dobre spravene.

eMCeee89

dakujem este raz  :banana_guitar:...to otvaranie suboru v main-e tam nemalo byt. to je len pozostatok mojej snahy o automaticke nacitanie dat zo suboru. teraz, ked viem, ze ako to ma byt tak sa mi az hlava toci   :whacko:

petocervik

Ja som mal take zadanie, v ktorom nebolo urcene kedy mam udaje zo subora nacitat a kedy ukladat. Podla mna som si mohol zvolit, ze ci to budem robit ako volbu v menu alebo to spravim na zaciatku a na konci programu. Sak tam bolo aj take, ze dodefinovanie zadania.
p.s.: ja som to dal do menu pre lepsi efekt  :)
Kybernetika a informačno-riadiace systémy 2. ročník

Ing. nemtom

lol 4 roky sa stretavam s prvackym zadanim a nikdy ma nenapadlo ukladat to takto priamo do suboru :D inak neni zly napad :D
brix will be shat

eMCeee89

no ako....takto.....ani mna to nenapadlo, ja som len prezentoval ten moj program na cviceniach a povedal mi, ze nech prepisem program tak, aby nacital udaje priamo pri spusteni. a ja namiesto tohto jednoducheho prikazu som tam zacal vypisovat do mainu ze fopen, atd...  :evica:
takze som samozrejme zapocet nedostal. dnes idem znova, dnes to ale uz musi vyjst. takze drzte palce  :)

eMCeee89

fiiiiha, tak neviem kde, ale u mojho cviciaceho to nejde. ale ani by som nechcel, potom o com by bola cela skola keby rozdavali body len tak nie? :baaa:

JCube

Quote from: eMCeee89 on  18.05.2009, 16:55:53
fiiiiha, tak neviem kde, ale u mojho cviciaceho to nejde. ale ani by som nechcel, potom o com by bola cela skola keby rozdavali body len tak nie? :baaa:
na to prides neskor...ked zistis ze makas a inym sa body rozdavaju :)
sudo [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Alive!"

puq

presne tak a ked ti bude stacit pocit ze aj nieco vies tak je to potom vpohode :D ale i tak ta to bude jebat ;)

eMCeee89

mne je to v podstate jedno, kolko bodov maju ostatny. hlavne je, ze ja mam viac  ;D .....ale nie. ja si robim srandu. pokial sa profaci spravaju ferovo ku mne, tak mi je to v celku jedno ci niekoho zvyhodnia. no a zatial som uplne spokojny. momentalne mi chyba uz iba 1 zapocet (este bude opravna), ale to je len a len moja chyba  bu