C koniec suboru (EOF)

Programovacie jazyky, rady, poradňa...
stejko
Light Star
Light Star
Príspevky: 214
Registrovaný: 01 mar 2008, 8:22
Kontaktovať používateľa:

C koniec suboru (EOF)

Príspevok od používateľa stejko »

zdravim, neviem si rady s tymto problemom:
Potrebujem nacitat cisla zo vstupu, koniec vstupu je dany bud hodnotou 0 alebo nieje dany nijak(EOF) ?
priklad vstupu: 37.57 1 5 5 0
2.priklad vstupu: 27.52 10 5 10 2 0.01 0.01 0.05 0.05 0.20 0.20

moj kod:
for (int i=0; value!=0 || (EOF); ){
scanf("%f",&value);
suma+=value;
}

PS: s premennou value potrebujem v tom cykle for vykonat este nejake dalsie operacie
lowmanek
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 977
Registrovaný: 04 apr 2010, 8:53
Bydlisko: 221B Baker Street

Re: C koniec suboru (EOF)

Príspevok od používateľa lowmanek »

Tvoj kod je uplne zly a v takomto pripade sa for-cyklus rozhodne nepouziva. Navyse konstanta EOF je system defined a mala by byt nejake zaporne cislo, takze v tvojej podmienke by EOF bolo vzdy vyhodnotene ako true.
Da sa pekne vyuzit, ze scanf vracia pocet nacitanych hodnot, teda ak nenacita ziadnu, vrati 0.
Preto:

Kód: Vybrať všetko

while (scanf("%d", &i) && i != 0) {
urobNieco(i);
}
stejko
Light Star
Light Star
Príspevky: 214
Registrovaný: 01 mar 2008, 8:22
Kontaktovať používateľa:

Re: C koniec suboru (EOF)

Príspevok od používateľa stejko »

sorry, ale ani tvoj kod nebol uspesny, bola este potrebna mensia uprava:

Kód: Vybrať všetko

while (scanf("%d", &i)!=(EOF) && i != 0) {
urobNieco(i);
}
lowmanek
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 977
Registrovaný: 04 apr 2010, 8:53
Bydlisko: 221B Baker Street

Re: C koniec suboru (EOF)

Príspevok od používateľa lowmanek »

Aha, my bad, zabudol som, že scanf sice vráti počet úspešne načítaných prvkov, ale ak nemá aké čítať, nevráti 0 ale EOF. Tvoj kód je validný, ale závotrky pri EOF byť nemusia.
Napísať odpoveď