Hirdetés

2024. május 2., csütörtök

Gyorskeresés

Hozzászólások

(#151) sghc_toma válasza amargo (#148) üzenetére


sghc_toma
senior tag

ezzel a getchar-os megoldással azért van egy bibi: ha az input több mint 1 karakter, akkor többször fut le a do magja... sima I+enter-re is kétszer fut le... char helyett string, getchar helyett cin >>, úgy már oké..

in asm we trust

(#152) caddie válasza Zulfaim (#140) üzenetére


caddie
csendes tag

Hat a kod sok-sok sebbol verzik:

- buff = ' 'zzz' ' ez mi ez?, miert nem hasznalsz inicializalasi listat?
- kiiro operatornak nyugodtan lehet const buffer& -t atadni
- += operatornt - minimalisan - igy modositanam:

)
buffer& buffer:: operator+=( const char* value)
{
char* temp=new char[size = strlen(buff)+ strlen(value) +1];
strcpy(temp,buff);
strcat( temp, value);
delete[] buff;
buff = temp;
return *this;
}


teljesen feleslegesen masolgatsz es foglalsz memoriat. Jelen pillanatban nem ellenerozom, hogy az atadott pointer null pointer / van legalabb 1 karkater benne stb. Ezt belehekkelheted.

- ertekado operatornal, bevallom nem ertem ezt:

for(int i=0;i<size;i++)
{
buff=e.buff;
}


ez mi ez?

talan

for(int i=0;i<size;i++)
{
buff [ .i. ] =e.buff [ .i. ] ; // konvertalas miatt :(
}


? De ez sem jo, mert a vegere nem masolja oda a '/0' -t. Sztem erdemesebb lenne hasznalni a strcpy-t

- kiiro operator hasonloan beteg

- nem latok racionalis okot, hogy meirt van a += es az egyik ertakado operator az osztalyon belul definialva, a tobbi meg kivul.

- copy konstruktor is beteg, keves memoriat foglalsz es utana u.a. a hulyeseg van mint ertakado operatornal

- sztem teljsen feleslegesen a postfix incerementalo operatorok

[Szerkesztve]

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#154) caddie


caddie
csendes tag

1, Osztalyon kivul definicio:
- letisztult marad az osztaly interface ( kod olvashatosag )
- tipikusan kulon header / forras fileokba rendezzuk az osztaly deklaraciot es definiciot, hogy az osztaly implementaciojanak megvaltoztatasakor ne kelljen ujraforditani mindne olyan forrasfilet, amely csak az interface-tol fugg (erre vannak meg szofisztikaltabb modellek is pl: pimpl idiom)
- C++ -ban az a szokas, hogy az inline fuggvenyeket definialjuk osztalyon belul, amelyek 1-2 sorosak, a tobbit pdig osztalyon kivul definialjuk


2, using namespace std;

- ezt alapbol nem ajanlott hasznalni, mert az std nevterben levo osszes elerheto nevet beemeli, helyette specifikusan a hasznalt neveket szokas / vagy meginkabb minositeni szokas a hasznalt dolgokat
- ha header file-ba irod be, akkor az osszes forrasfile amely felhasznalja a headert keretlenul is megkapja az osszes std nevterben levo elerheto nevet
- nevtereket pont azert talaltak ki, hogy particionalva legyenek (felosztva) a nevek. using namspace std beemelesevel pont ezt iktatjuk ki, hiszen minden beemelunk a ''globalis'' nevterbe


3, inicializalasi lista:

- amikor a konstruktor torzsebe adod meg, hogy adott member valtozonak milyen kezdoerteket szeretnel megadni, akkor eloszor letrejon az objektum, lefut a default konstruktora, majd egy kulon fuggvenyhivas kereteben masolodik at a kezdoertek. inicializalasi listaval az adott valtozo konstrualasakor mar kezdoertekkel latod el azt (tehat hatekonyabb es igy az elegans, erre talaltak ki az inicializalasi listat).


4, size_t: STL az egy peldas kod, erdemes annak a filozofiaja szerint dolgozni, annak eszkozeit hasznalni es amennyire ertelmes idomulni hozza.

5. NULL nincs benne a C++ szabvanyban, teljesen forditofuggo, hogy van-e benne, mi van mogotte (makro) es hogy a fordito kov. verziojaban is benne lesz-e. amugya 0 -nak implicit konverzioja van pointerekre.

6. a postfix novelo operatorok definicio szerint egy temporalis objektumba mentik a valtozo eredeti erteket, majd megnovelik a valtozo erteket, a regi erteket pedig visszadjak. a prefix novelo operator cask novel es visszaad, ergo a postfix min 2x annyi muveletet vegez (szamszeruleg, valoszinuleg a fordito ugyanis kioptimalizalja). A lenyeg, hogy prefix kell mindenhova kiveve ahova postfix kell :)


Roviden ennyi, remelem nem hagytam ki semmit

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#155) amargo válasza Ramius (#149) üzenetére


amargo
addikt

Ne nekem köszönd, én csak összeraktam, amit előttem 2-en mondtak.

sghc_toma Szintén. Csak a felette lévő 2HSZ-t pakoltam egybe. Én cin-el operálok. a getchar-t nem ismerem.

“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”

(#156) Zulfaim


Zulfaim
csendes tag

Most a program beolvasás részét próbálom megoldani, de valami probléma van vele.

int karakterek_szama()
{
fstream fp(''c:\\txt.txt'',ios::in);
char s[100];
int k=0;
while(fp>>s)
++k;
fp.close();
return k;
}

istream& operator>>(istream& s, buffer b)
{
int k=karakterek_szama();
delete[] b.buff;
b.buff=new char[(b.size=k)+1];
for(int i=0;i<b.size;++i)
{
s>>b.buff;
}
return (s);

}
void beolvas(buffer b)
{
fstream fp(''c:\\txt.txt'',ios::in);
while(fp>>b.buff)
fp.close();

}


A karakterek_szama() fgv.-el meghatározom, hogy mennyi memóriaterület kell.
Ezt lefoglalom és kiolvasom a fájl tartalmát.
A beolvas függvény friend.
Nem működik.

[Szerkesztve]

(#157) Zulfaim


Zulfaim
csendes tag

Befejeztem.
Ez lett a vége:

#include <cstring>
#include <iostream>
#include <fstream>

using namespace std;

class buffer {
char* buff;
int size;
public:
buffer():buff(0),size(0){}
buffer(const buffer&);
buffer& operator=(const buffer&);
buffer& operator+=(const buffer&);
bool operator==(const buffer&);
buffer& buffer:: operator+=( const char*);
buffer& buffer:: operator=(const char*);
bool buffer:: operator==(const char*);
friend void beolvas(buffer &);
friend void kiir(buffer &);
friend ostream& operator<<(ostream& s, const buffer b);
friend istream& operator>>(istream& s, const buffer b);
~buffer(){ delete[] buff; }

};

buffer::buffer(const buffer& e)
{
buff=new char[(size=e.size)+1];
if (e.buff)
strcpy(buff,e.buff);
}

buffer& buffer:: operator+=( const char* value)
{
char* temp=new char[size = strlen(buff)+ strlen(value) +1];
strcpy(temp,buff);
strcat(temp, value);
delete[] buff;
buff = temp;
return *this;
}

buffer& buffer:: operator+=(const buffer& e)
{
char* temp=new char[size+=(e.size+1)];
strcpy(temp,buff);
strcat(temp,e.buff);
delete[] buff;
buff=temp;
return *this;
}

buffer& buffer:: operator=(const char* value)
{
delete[] buff;
if( size=strlen(value))
{
buff=new char[size+1];
strcpy(buff,value);
}
return *this;
}


buffer& buffer:: operator=(const buffer& e)
{
if( this!= &e)
{
delete[] buff;
buff=new char[size=e.size];
strcpy(buff,e.buff);
}
return *this;
}

bool buffer:: operator==(const char* value)
{
if(size==strlen(value)) return true;

else return false;
}


bool buffer:: operator==(const buffer& e)
{
if(size==e.size) return true;

else return false;
}

ostream& operator<<(ostream& s, const buffer b)
{
for(int i=0;i<b.size;++i)
{
s<<b.buff;
}
return (s);

}

int karakterek_szama()
{
fstream fp(''c:\\txt.txt'',ios::in);
char c;
int k=0;
while(!fp.eof())
{
fp.get(c);
++k;
}
fp.close();
return k;
}

istream& operator>>(istream& s, buffer b)
{
int k=karakterek_szama();
delete[] b.buff;
b.buff=new char[(b.size=k)+1];
for(int i=0;i<b.size;++i)
{
s>>b.buff
;
}
return (s);

}

void beolvas(buffer& b)
{
int k=karakterek_szama();
delete[] b.buff;
b.buff=new char[(b.size=k)+1];
fstream fp(''c:\\txt.txt'',ios::in);
while(!fp.eof())
{
fp.getline(b.buff,b.size);
}
fp.close();
}

void kiir(buffer& b)
{
fstream fp(''c:\\txt.txt'',ios::out);
fp<<b.buff;
fp.close();
}

int main()
{
buffer b;
buffer a;
beolvas(b);
char s[7]=''+FUZES'';
char s2[11]=''ASDFWERGWE'';
a=s2;
cout<<(a==b);
cout<<endl;
b+=s;
cout<<b;
cout<<endl;
b+=a;
cout<<b;
kiir(b);
cin.get();
return 0;
}


[Szerkesztve]

(#158) Pitasama


Pitasama
csendes tag

Sziasztok!!!
Bocs a késői jövetelért, de már annak is örülök, h idetaláltam... :)
Szóval... Eléggé nagy gázban vagyok.... egy feladatot kéne megcsinálnom, de fingom nincs hozzá nem is értem... :S
Szóval ha esetleg meg tudnátok csinálni nagyon megköszönném!

Készítsen el egy osztályt (zeneszám) zeneszámok tárolására!
Legyen egy max. 40 ch hosszú attribútuma az előadó, egy max 40 ch hosszú attribútuma
a zene címének, továbbá egy egész változója a szám hosszának másodpercekben történő
tárolására. Lássa el az osztályt a zegyes változók bállítására, ill. kiíratására
szolgáló metódusokkal! (setArtist, getArtist, setTitle, getTitle, setLength, getLength)
Ebből az osztályból hozzon létre 3 objektumot és alkalmazza rájuk a megírt metódusokat!

Ez lenne az. Kérlek titeket, h ha vki tudja a megoldást, hétfő este 8-ig próbálja vhogy hozzám eljuttatni... és lehetőleg úgy, h az objektumos részt zárójellel a szöveg mögött elmagyarázva, h mi miért van.
Előre is köszönöm!!!!
jah és lehetőleg erre a mélre küldjétek el nekem mert nem fix, h elérem az oldalt a kóterból.
Köszi
jóccakát mkinek!!!

(#159) norbiphu


norbiphu
senior tag

üdv!

adott ez a kód [link]

azt nem értem, hogy b = b *2 - nél, meg b = 3 * b miért hívodik meg a copy konstruktor :B.
addig oké, hogy operator* miatt kiirja az szorzót, utána pedig operator= - höz ugrik.
ott viszont elvesztettem a fonalat, hogy miért ez a sorrend.

köszi a segítséget :R

"Hmm," sed teh lolrus. "Maybe we shud go ask Ceiling Cat?"

(#160) caddie válasza norbiphu (#159) üzenetére


caddie
csendes tag

A kodot nem neztem, de a copy konstruktor azert hivodik, mert az operator*() egy temporalis objektumot 'hoz letre' es ez adodik ertekul a b-nek.


# 1 b = b * 2
# 2 b = [ c ]
# 3 b = c



Ez lenne a normalis megvalositasa egy opeartor*() -nak, amely 'free' esetleg friend fuggvenykent van megvalositva.

[Szerkesztve]

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#161) FehérHolló


FehérHolló
veterán

Itt is feltenném a kérdést.
Ennek a második bekezdésében van leírva: [link] :)

A kivételi és visszahozatali időt time()-al tárolnám, majd ctime()-al hasonlítanám őket.

[Szerkesztve]

Skynet is real. It's called Google.

(#162) Jester01 válasza FehérHolló (#161) üzenetére


Jester01
veterán

Mire is kell itt a ctime?

Jester

(#163) FehérHolló válasza Jester01 (#162) üzenetére


FehérHolló
veterán

difftime() akart lenni.

[Szerkesztve]

Skynet is real. It's called Google.

(#164) caddie válasza FehérHolló (#161) üzenetére


caddie
csendes tag

En megmondom oszinten nem ertem mi a kerdes. Kiprobalod aztan majd kiderul.

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#165) amargo válasza FehérHolló (#163) üzenetére


amargo
addikt

union { // Struktura
LONGLONG li;
FILETIME ft;
} CreateTime, EndTime, ElapsedTime;
SYSTEMTIME SYSstart, SYSend, SYSelapsed;
GetLocalTime(&SYSstart);
Sleep(600);
GetLocalTime(&SYSend);
SystemTimeToFileTime(&SYSstart, &CreateTime.ft);
SystemTimeToFileTime(&SYSend, &EndTime.ft);
ElapsedTime.li = EndTime.li - CreateTime.li;
FileTimeToSystemTime(&ElapsedTime.ft, &SYSelapsed);

Bár a dátumra nem tökéletes, de én uniont hazsnálnék a célra.

“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”

(#166) Zulfaim


Zulfaim
csendes tag

Utólag:
4-es lett a házim.
Kösz a segítséget mindenkinek!

(#167) FehérHolló válasza amargo (#165) üzenetére


FehérHolló
veterán

:U
Erről rögtön levágta volna a gyakvezér, hogy nem én csináltam. :)
Két sima time()-al megoldottam a problémát.
Köszi szépen a segítséget! Ezt elrakom későbbre emésztgetni (2 órát aludtam, és most nem jön össze semmi...).
Csak eléggé rámijesztettek, amikor elkezdtek mellettem 300soros időkezelésről beszélgetni a többiek.
A union nem struktúra.

[Szerkesztve]

Skynet is real. It's called Google.

(#168) Zulfaim


Zulfaim
csendes tag

Valaki leírná nekem egy példán keresztül szemléltetve, az iterátor használatát?
Előre is köszi.

(#169) Jester01 válasza FehérHolló (#167) üzenetére


Jester01
veterán

Szerintem várd meg míg Amargo megmagyarázza, mert nekem sem tiszta mi előnye van a 2 time hívással szemben. Ráadásul ezek windowsos varázslatnak tűnnek.

Jester

(#170) caddie válasza Zulfaim (#168) üzenetére


caddie
csendes tag

Erre annyit lehet mondani, hogy:

1. szakirodalom
2. a) net: [link]
2. b) google: c++ iterator tutorial

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#171) amargo válasza FehérHolló (#167) üzenetére


amargo
addikt

Még annó referencia könyvből vettem. Szerintem te is ugyan úgy rátalálhattál volna ilyenre, a tanár nem feltételezheti azt, hogy nem nézel utána a dolgoknak.

Jester01 : Magyarázat a fentiek. Könyvben találtam, eddig 1x használtam, amikor ezredmásodperces pontossággal kellettek a dolgok.

[link]
[link]

“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”

(#172) satchmo válasza stromannn (#30) üzenetére


satchmo
csendes tag

Ha mindenképp 3d a cél, akkor directx tudásra is szükdéged lesz szerintem

(#173) FehérHolló válasza satchmo (#172) üzenetére


FehérHolló
veterán

Több, mint 1 éves hozzászólásra sikerült válaszolnod. ;)

#171: Millisecre tényleg nem tudok jobb megoldást. De nekem szerencsére csak annyi volt a feladatom, hogy órában határozzam meg egy kölcsönzés időtartamát.

[Szerkesztve]

Skynet is real. It's called Google.

(#174) amargo válasza FehérHolló (#173) üzenetére


amargo
addikt

Szerk: Hülyeséget keztem leírni, az előbb.

[Szerkesztve]

“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”

(#175) FehérHolló


FehérHolló
veterán

Már igazából tök mindegy, mert elfogadták a házit, csak engem piszkál a dolog:

Adott ez a kódrészlet, biztos, hogy ebben van a hiba:
ifstream if2(costfile,ios::binary | ios::in);
if(if2){
while(!if2.eof()){
tmpc.restore(if2);
C.insert(C.size(),tmpc);
}
if2.close();
}


Ez eggyel többször olvas be, mint kellene. Tehát EOF után még beolvassa a semmit, és nem nagyon értem, hogy miért. Biztos tök egyszerű a válasz, csak én vagyok a buta.

a restore(ifstream&) tagfüggvény így néz ki:
void restore(ifstream& f){
String tmpstr;
f.read((char*) &costumer_id,sizeof(unsigned));
tmpstr.restore(f);
f.read((char*) &to_pay,sizeof(unsigned));
f.read((char*) &paid,sizeof(unsigned));
f.read((char*) &item_out,sizeof(unsigned));
this->set_name(tmpstr);
}


[Szerkesztve]

Skynet is real. It's called Google.

(#176) caddie válasza FehérHolló (#175) üzenetére


caddie
csendes tag

Nyilvanvaloan ciklus kesesben van az EOF ellenorzes, mert te a kovetkezot csinalod:


file: < megnyit
adat < ellenoriz majd olvas
adat < ellenoriz majd olvas
EOF < ellenoriz (adatot olvasott elozoleg) majd olvas(EOFot meg minden mast ami mar nincs is)
... < ellenoriz (EOF volt!) es kilep


Mas:

tmpstr.restore(f);


A restore fuggvenyen belul mi ez a masik restore hivas. Valami rekurziv fuggvenyhivas?

[Szerkesztve]

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#177) FehérHolló válasza caddie (#176) üzenetére


FehérHolló
veterán

Szerintem meg úgy van, hogy:
1. file megnyit
3. megnyitás ellenőriz
2. eof ellenőriz
3. olvas
4. eof ellenőriz
5. olvas
...

Az a String::restore(ifstream&) hívása. De a restore-okkal nincs gond, mert ha többet kell restore-olni egymás után, akkor nem kerül egyikbe sem hülyeség. Csak mint mondtam, a végén ráolvas mégegyszer, amikor már EOF volt.

[Szerkesztve]

Skynet is real. It's called Google.

(#178) caddie válasza FehérHolló (#177) üzenetére


caddie
csendes tag

Ha megnezted volna amit irtam, akkor latszik, hogy en egy konkret eseten irtam le az algoritmus mukodeset, nem altalanossagban... :(

Olvasol egy sor adatot (n db olvasas egy ciklusban), pont EOF elott er veget az olvasasi sorozat. Az ellenorzes ebben az esetben termesztesen azt mondja, hogy meg nincs EOF, igy elkezded a kovetkezo (n db) olvasast: Az elso adat olvasasakor EOF jon, de te sehol nem ellenorzod, hanem haladsz szepen tovabb es beolvasol n-1 db tovabbi 'adatot' es amikor megtetted csak akkor ellenorzol EOF-ot ujra.

Tovabbra sem ertem ugyanakkor, hogy mi a terminalo feltetele a String::restore() rekurziv hivassorozatnak. A restore ismet es ismet meghivja onmagat...

Azt sem ertem, hogy miert nevezted el a String osztalyodat Stringnek? A standard ugyanis definial egy std::string -et, rendkivul megteveszto!!

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#179) FehérHolló válasza caddie (#178) üzenetére


FehérHolló
veterán

Így már értem, hogy mit szeretnél kifejezni, köszi!

Nincs semmiféle rekurzió.

String egy saját stringosztály, aminek a megírása egy másik házi volt. Kiegészítettem néhány dologgal, ami kellett ehhez a feladathoz. Lényegében ugyanazt csinálja, mint a beépített string osztály (konverzió tekintetében is), de ennek tudom a pontos felépítését, így inkább ezt használtam fel újra.

[Szerkesztve]

Skynet is real. It's called Google.

(#180) KMan


KMan
őstag

Hello, itt mi a hiba? Koszi es udv

#include <stdio.h>
#include <stdlib.h>

void main()

{

typedef struct {
char pontazon;
double kelet;
double eszak;
} t_pont;

FILE * fpontok;
t_pont spontok[4];
int i;


fpontok=fopen(''PONTOK.DAT'',''wb'');

for (i=0;i<4;i++)
{
Printf(''A(z) %d pontazon: '', i); Scanf(''%c'', &spontok.pontazon);
Printf(''A(z) %d kelet: '', i); Scanf(''%f'', &spontok.kelet);
Printf(''A(z) %d eszak: '', i); Scanf(''%f'', &spontok.eszak);
}

for (i=0;i<4;i++)
{
Printf(spontok);
}

flose(fpontok);

}

Csak a balekok alszanak [SAS]

(#181) Lortech válasza KMan (#180) üzenetére


Lortech
addikt

Mondjuk úgy az egész egy merő hiba..Printf > printf, Scanf > scanf, flose > fclose. Beolvasásnál nem kéne indexelni a spontok-at?
printf(spontok); -- printf nem találja ki, hogy mit akarsz, csak char-t adhatsz neki. Le kell programozni egy eljárást, amiben minden mezőjét kiiratod külön-külön egy t_pont-nak.

Thank you to god for making me an atheist

(#182) shev7 válasza Lortech (#181) üzenetére


shev7
veterán

Beolvasásnál nem kéne indexelni a spontok-at?

Szerintem indexelte, csak a forummotor jol lenyelte...

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#183) Lortech válasza shev7 (#182) üzenetére


Lortech
addikt

Én meg jól beszoptam. :) Pedig általában eszembe jut.
Mindenesetre én ki szoktam javítani [ i ]-re!
teszt: &spontok.pontazon
teszt2: &spontok[ i ].pontazon

Thank you to god for making me an atheist

(#184) caddie válasza KMan (#180) üzenetére


caddie
csendes tag

void main :)

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#185) KMan válasza Lortech (#181) üzenetére


KMan
őstag

#include <stdio.h>
#include <stdlib.h>

void main()

{

typedef struct {
char pontazon;
double kelet;
double eszak;
} t_pont;

FILE * fpontok;
t_pont spontok[4];
int i=0;


fpontok=fopen(''C:\\PONTOK.DAT'',''wb'');

for (i=0;i<4;i++)
{
printf(''A(z) %d pontazon: '', i);
scanf(''%c'', &spontok.pontazon);
printf(''A(z) %d kelet: '', i);
scanf(''%f'', &spontok.kelet
);
printf(''A(z) %d eszak: '', i);
scanf(''%f'', &spontok.eszak);
}

fclose(fpontok);

}

a scanf helyett nem fwrite-ot kellene hasznalni? Most nem foglalkozom azzal hogy kiiirassam a kepernyore, csak bele akarom irni a fajlba, ugyhogy a bill-rol kerem be az adatokat.


[Szerkesztve]

Csak a balekok alszanak [SAS]

(#186) KMan válasza Lortech (#183) üzenetére


KMan
őstag

melyik a helyes?

&spontok.pontazon[ i ] ;
&spontok[ i ].pontazon ;

Csak a balekok alszanak [SAS]

(#187) Lortech válasza KMan (#185) üzenetére


Lortech
addikt

Már megint lemaradtak az indexek, használj [ i ]-t. (szóközök)

a scanf helyett nem fwrite-ot kellene hasznalni? Most nem foglalkozom azzal hogy kiiirassam a kepernyore, csak bele akarom irni a fajlba, ugyhogy a bill-rol kerem be az adatokat.
Mi tudjuk, hogy mit akarsz? :) scanf-fel feltöltöd a struktúrát, ha ezt ki is akarod írni akkor nyilván kell valamilyen fájlíró függvény is (pl fwrite, fprintf, puts), de nem egyik a másik helyett, hanem együtt.. Vagy kiírhatod a fájlba a semmit is. :D (vagy nem értem)

#186: Melyik a tömböd? A spontok. Akkor pedig a 2.


[Szerkesztve]

Thank you to god for making me an atheist

(#188) KMan válasza Lortech (#187) üzenetére


KMan
őstag

Na :)

Azt szeretnem hogy nincs a fajlban semmi. A progi ugye megnyitja a meg nemletezo fajlt irasra. Aztan a standard inputrol egyesevel bekeri a struktura egyes tagjait, es ezt elmenti a fajlban. Majd miutan ennek a muveletnek vege, csak a biztonsag kedveert szeretnek vegigmenni a fajlon es kiiratni az elemeket, csak hogy minden tuti-e.


Csak a balekok alszanak [SAS]

(#189) FehérHolló válasza caddie (#178) üzenetére


FehérHolló
veterán

Nem tudom megnézni azóta sehol. Magamtól szerettem volna látni, mert úgy az igazi, de akkor most már inkább kérdezek.

Az eof flag akkor állítódik, amikor a beolvasott cucc után vége van a file-nak (de eof-et még nem olvasott be), vagy akkor, ha magát az eof-et olvasta be a file-ból?

A te mondandód alapján utóbbi az igaz, de én eddig az előbbit hittem. Most akkor mi a helyzet? :)

Remélem érted, amit kérdezni szeretnék.

[Szerkesztve]

Skynet is real. It's called Google.

(#190) caddie válasza FehérHolló (#189) üzenetére


caddie
csendes tag

Sztem logikus, hogy az utobbi. Nem varhatjuk el C++-tol, hogy nekunk elore olvas (sott elvarjuk, hogy ne olvasgasson ossze vissza). A I/O flagek a stream aktualis allapotat tukrozik, amikor pedig a kov. elem az eof, akkor bizony az majd csak a kovetkezo olvasaskor fog kiderulni.

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#191) FehérHolló válasza caddie (#190) üzenetére


FehérHolló
veterán

Megpróbálom ennek szellemében újraalkotni. :)
Bár talán egyszerűbb lesz úgy, hogy megnézem mennyi a file összmérete, azt csak annyit olvasok ki, és nem az EOF-t nézem.
Köszi a világnézeti kiigazítást!

Skynet is real. It's called Google.

(#192) amargo válasza KMan (#188) üzenetére


amargo
addikt

írásra megnyitás az utolsó dolog, álltalában nem javasolják, hogy csak vaktába, hagyd megnyitva. előbb szedd össze az adatokat, majd rakd ki.

“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”

(#193) KMan válasza amargo (#192) üzenetére


KMan
őstag

a 0. elemet meg korrektul bekeri, de az 1-nel mar kihagyja a pontazon scanf-jet es egyszerre dobja ki a printf-et. :F


#include <stdio.h>
#include <stdlib.h>

main()
{

typedef struct {
char pontazon;
double kelet;
double eszak;
}t_pont;

int i=0;

FILE * fpontok;
t_pont spontok[4];
fpontok=fopen(''C:\\PONTOK.DAT'',''wb'');

for (i=0;i<5;i++)
{
printf(''A(z) %d pontazon: \n'', i);
scanf(''%c'', &spontok[ i ].pontazon);
printf(''A(z) %d kelet: \n'', i);
scanf(''%f'', &spontok[ i ].kelet);
printf(''A(z) %d eszak: \n'', i);
scanf(''%f'', &spontok[ i ].eszak);
}

fclose(fpontok);
}

Csak a balekok alszanak [SAS]

(#194) bpx válasza FehérHolló (#189) üzenetére


bpx
őstag

pascalban így működik az eof (előre ''jósol''), c-ben viszont nem :/
pont a másik programozós topikban is felmerült valamelyik nap a probléma

itt van egy lehetséges példa a megoldásra: [link]

(#195) Lortech válasza KMan (#193) üzenetére


Lortech
addikt

Dobj be egy szóközt az első scanf formátumában a %c elé ( scanf('' %c'', &spontok[ i ].pontazon); ).
Meg a tömböt is túlindexeled beolvasáskor. 5-ször fut le 4-es maxindexszel, de csak 4 elemed van ( maxindex = 3)

Thank you to god for making me an atheist

(#196) caddie válasza bpx (#194) üzenetére


caddie
csendes tag

Ha ilyet leirsz C++-ban akkor szegyeld magad, de nagyon.

''C++ : Where friends have access to your private members.'' — Gavin Russell Baker.

(#197) KMan válasza Lortech (#195) üzenetére


KMan
őstag

:R muxik koszi, 5 elemu lett a tomb indexek 0-4 ig, mostmar jo a for ciklus.

[Szerkesztve]

Csak a balekok alszanak [SAS]

(#198) KMan válasza Lortech (#195) üzenetére


KMan
őstag

mostmar korrektul bekeri, de szeretnem kiiratni a bekert a elemeket. elvileg egymasutan jonnek a fajlban nem? ez a szokoz amit beltettunk nem zavart bele?
elvileg nem kene hogy szokozok legyenek a fajlban, minden adat egymas utan jon

pl igy nez ki a fajl: A1.24.3B4.53.2C12.3 stb...

ezzel probaltam meg kiiratni de semmi. :F

void pontokkiir()
{
i=0;
for (i=0;i<5;i++)
{
fprintf(fpontok, ''%c%lf%lf'', &spontok[ i ].pontazon,
&spontok[ i ].kelet, &spontok[ i ].eszak);
}
}

Csak a balekok alszanak [SAS]

(#199) Lortech válasza KMan (#198) üzenetére


Lortech
addikt

A szóköz arra kellett, hogy ne fusson össze a két scanf, mivel benne maradt az előzőből a sorvége, és azt rakta bele a pontazon-ba, és egyből ugrott a következő scanf-re. Úgy vannak a fájlban az adatok, ahogy kiírod őket..
Nem teszteltem le, de ennek ránézésre mennie kéne, ha kiveszed a &-t a változók elől. :)

Thank you to god for making me an atheist

(#200) KMan válasza Lortech (#199) üzenetére


KMan
őstag

Nem az a para, hogy az adatok nincsennek a fajlban? csak a memoriaba vannak beolvasva a scanf-el, fwrite-al bele kene irni a fajlba, es onnan fread-el visszaolvasni nem? :F

Csak a balekok alszanak [SAS]

Copyright © 2000-2024 PROHARDVER Informatikai Kft.