| | |
| Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Autor | Správa |
---|
Registrovaný: 12.05.09 Prihlásený: 21.05.10 Príspevky: 33 Témy: 8 Bydlisko: Bánovce nad... |
zdravím pls o pmoc. mám vstupný súbor takýto:
Kód: 1760 Jozef Maly 0 1078.88 11112009
1799 Maria Krasna 1 636.98 12101999 a výstup na obrazovku má vyzerať takto: Kód: osobne cislo zamestnanca: 1760 meno priezvisko: Jozef Maly administrativa/vyrobny pracovnik: 0 plat: 1078.88 datum: 11112002
osobne cislo zamestnanca: 1799 meno priezvisko: Maria Krasna administrativa/vyrobny pracovnik: 1 plat: 636.98 datum: 12101999 a moja funkcia čo s parametrom smerníka na súbor je takáto: Kód: void vypis(FILE *f) { int cis,poz,datum,c; double plat; char meno[30]; if((f=fopen("ZAMESTNANCI.TXT","r"))==NULL) printf("Neotvoreny subor\n"); else { while((c=getc(f))!=EOF) { ungetc(c,f); fscanf(f,"%d",&cis);printf("osobne cislo zamestnanca: %d\n",cis); fgets(meno,30,f);printf("meno priezvisko: ");puts(meno); fscanf(f,"%d",&poz);printf("administrativa/vyrobny pracovnik: %d\n",poz); fscanf(f,"%lf",&plat);printf("plat: %.2lf\n",plat); fscanf(f,"%d",&datum);printf("datum: %d\n",datum); putchar('\n'); if((c=getc(f))==EOF) ungetc(c,f); } } }
a nevypisuje to ako by malo a ja za ten svet nemôžem prísť na chybu! pomôžte mi pls.
_________________ SE C905 8GB
Gaming Notebook MSI GX720X-027SK P8400 4GB 320GB VGA |
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
Kód: void vypis() { FILE *f; int cis,poz,datum,c; double plat; char meno[30]; if((f=fopen("file.txt","r"))==NULL) printf("Neotvoreny subor\n"); else { while((c=getc(f))!=EOF) { ungetc(c,f); fscanf(f,"%d",&cis);printf("osobne cislo zamestnanca: %d\n",cis); fgetc(f); fgets(meno,30,f);printf("meno priezvisko: "); meno[strlen(meno)-1]=0; puts(meno); fscanf(f,"%d",&poz);printf("administrativa/vyrobny pracovnik: %d\n",poz); fgetc(f); fscanf(f,"%lf",&plat);printf("plat: %.2lf\n",plat); fscanf(f,"%d",&datum);printf("datum: %d\n",datum); putchar('\n'); if((c=getc(f))==EOF) ungetc(c,f); } } }
ak sa nemylim je to prvy (ak neratam hviezdicky) projekt z prpr na fiit, mam pravdu? bolo to sposobene asi tym, ze scanf nenacita koniec riadka ak nacitava int. cize to treba este nacitat.
|
|
Registrovaný: 12.05.09 Prihlásený: 21.05.10 Príspevky: 33 Témy: 8 Bydlisko: Bánovce nad... |
áno všetko sme tu fiitkári:D hej je to z toho prvého projektu. Už som bol fakt bezradný až nakoniec som na to nejako prišiel a potom si odpísal...
inak ak tu mám niekoho skúseného ešte by som sa rád spýtal ako zistím pomocou smerníka na pole, že či už bolo dynamicky vytvorené. ale bo teda či ešte nebolo vytvorené.
a ďalšia otázka ak by som mohol že ako zmením: double *pole -> char ch;
inak dik sa pomoc
_________________ SE C905 8GB
Gaming Notebook MSI GX720X-027SK P8400 4GB 320GB VGA |
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
1.: ak ho inicializujes na 0 a potom budes kontrolovat na pritomnost 0, ak tam bude, tak este neni vytvorene.
2.: to druhe sa neda, ak sa pytas na prevod double -> char*, tak sprintf.
|
|
Registrovaný: 12.05.09 Prihlásený: 21.05.10 Príspevky: 33 Témy: 8 Bydlisko: Bánovce nad... |
no vlastne mňa napadlo riešenie že mám FILE *f; double *pole;
som mu na začiatku pridelil že f=NULL; pole=NULL;
potom som aj súbor aj pole posielal ako parameter vo funkcií a súbor som otvoril a pole dynamicky alokoval.
a keď som ho poslal do inej funkcie ako parameter tak tam neviem prečo ale malo znovu hodnutu NULL vôbec sa mi to neprepísalo.
tá konverzia ide o to že mám double *pole;
čiže ukazovatel na pole doublov... a ja jednotlivé tie hodnoty potrebujem premeniť na pole charov...a myslím že ja som to debilne napísal a ty si my správne odpovedal:D.. ok syntax si už vygúglim ďakujem ti idem skúsiť prepísať to NULL za '0' alebo za 0?? má to byť ako znak alebo ako číselná hodnota??
_________________ SE C905 8GB
Gaming Notebook MSI GX720X-027SK P8400 4GB 320GB VGA |
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
NULL je 0, '0' je znak a jeho hodnota je 0x30
|
|
Registrovaný: 12.05.09 Prihlásený: 21.05.10 Príspevky: 33 Témy: 8 Bydlisko: Bánovce nad... |
hej ešte úplne posledná otázka len chcem vedieť či tomu správne chápem:
mám funkciu main a ak pošlem ukazovateľ na súbor (f) čomu som nastavil =0; a v inej funkcií ho otvorím cez fopen napr na čitanie tak v tej funkcií platí že f!=0;
ale keď sa vrátim späť do mainu tak tam bude znovu nastavený f na 0?
predpokladám že je to tak lebo tak nejak mi to funguje. keď presuniem otváranie súboru do nejakej inej funkcie takv maine keď skúšam f tak mi píše že je 0.
je to tak správne alebo len ja mám niečo zlé?? ale asi to mám zle lebo keď je to smerník tak tá hodnota by sa mala zmeniť aj keď som v inej funkcií nie?? mám v tom chaos.
to už je fakt posledná otázka už ťa viacej nebudem otravovať.
_________________ SE C905 8GB
Gaming Notebook MSI GX720X-027SK P8400 4GB 320GB VGA |
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
ano, najjednoduchsie riesenie je vratit hodbotu f funkciou a v maine ju priradit do f.
|
|
Registrovaný: 12.05.09 Prihlásený: 21.05.10 Príspevky: 33 Témy: 8 Bydlisko: Bánovce nad... |
ahoj ešte mám pls jednu otázku a nechcel som kôli tomu zakladať novú tému, že ak mám výpis double tak či môžem do formátu výpisu nejako vaužiť premennú??. príklad:
printf("%7.2lf",premena);
tak že či by som tie platné pozície (tá sedmička) mohol nejako nahradiť premennou??
printf("%int.2lf",premenná) a aby mi to vypisovalo na toľko platných miest ako je tá hodnota toho integera..
_________________ SE C905 8GB
Gaming Notebook MSI GX720X-027SK P8400 4GB 320GB VGA |
|
Registrovaný: 19.09.06 Prihlásený: 21.04.24 Príspevky: 749 Témy: 31 Bydlisko: Ružomberok&... |
isteze mohol, v C-cku spravis vsetko. Ale toto asi nebude uplne podporovane.
ale takto to ide, myslim ze aspon podstatu to vystihne, pre sirku vypisu viac ako 10 by to bolo ale trochu upravit.
Kód: float f=567.323; char i=9; char *buffer = (char*)malloc(sizeof(char)*strlen("cislo : %7.2lf\n")); strcpy(buffer,"cislo : %7.2lf\n"); buffer[9]=0x30+i; printf(buffer,f);
// 7 je tam len pre vyplnenie miesta
|
|
| Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|