Author Topic: program v jazyku C  (Read 6024 times)

eMCeee89

  • Newbie
  • *
  • Posts: 24
    • View Profile
program v jazyku C
« on: 16.05.2009, 17:13:25 »
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:
Code: [Select]
#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

  • Jr. Member
  • **
  • Posts: 50
    • View Profile
Re: program v jazyku C
« Reply #1 on: 16.05.2009, 18:13:44 »

 - 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

  • Newbie
  • *
  • Posts: 24
    • View Profile
Re: program v jazyku C
« Reply #2 on: 16.05.2009, 19:25:18 »
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

  • Full Member
  • ***
  • Posts: 160
    • View Profile
Re: program v jazyku C
« Reply #3 on: 17.05.2009, 22:29:56 »
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

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 7709
  • lofr dyslektik
    • View Profile
Re: program v jazyku C
« Reply #4 on: 17.05.2009, 22:30:56 »
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

  • Newbie
  • *
  • Posts: 24
    • View Profile
Re: program v jazyku C
« Reply #5 on: 18.05.2009, 16:50:59 »
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

  • Newbie
  • *
  • Posts: 24
    • View Profile
Re: program v jazyku C
« Reply #6 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:

JCube

  • Hero Member
  • *****
  • Posts: 9008
    • View Profile
Re: program v jazyku C
« Reply #7 on: 18.05.2009, 17:04:51 »
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

  • Hero Member
  • *****
  • Posts: 4065
    • View Profile
Re: program v jazyku C
« Reply #8 on: 18.05.2009, 17:07:33 »
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

  • Newbie
  • *
  • Posts: 24
    • View Profile
Re: program v jazyku C
« Reply #9 on: 19.05.2009, 20:23:44 »
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