Kezdőoldal » Számítástechnika » Programozás » Hogy lehetne elegánsabban...

Hogy lehetne elegánsabban lekódolni c-ben?

Figyelt kérdés

A lényeg, hogy egy file-ból számokat olvasok be. Egy sorban 5 szám van: év, hónap, nap, darab, selejt. A sorok számát nem tudjuk ezért a fájl végéig megyek.


Minden sornak elmegyek a végéig és közben beolvasok adatokat:


for(i = 0; !feof(adatok); i++)

{

for(j = 0; j !='\n'; j++)

{

fscanf(adatok, "%d %d %d %d %d\n", &ev, &honap, &nap, &db, &selejt);

}

}


Ez így elég ocsmány és lehet, hogy hibás is. Arra gondoltam, hogy a sor beolvasáson belül is lehetne még egy ciklus.

Ha tömbben lennének a számok akkor nem lenne gondom, mert akkor nem kéne beírni, hogy év hónap stb, hanem csak annyit, hogy &tomb[j].

De mivel minden változónak más neve van ezért tanácstalan vagyok.


Szóval, hogy lehetne egyszerűbben, szebben?



2015. ápr. 25. 19:23
 1/5 anonim ***** válasza:

Áhh, elkezdtem leírni sorban a hibákat, de ez úgy kompletten marhaság ahogy van.

Nem az, hogy csúnya, hanem teljesen hibás, kb minden egyes sor.


Gondold át ezt újra.

Minek a számlálós ciklus?

Miért nem egy struktúrában tárolod az értékeket?

Mi a búbánat akar lenni az a belső ciklus?

Mi értelme beolvasni újra és újra ugyanabb a változóba, majdnem minden egyes sornál elveszteni az előzőleg beolvasott adatokat?

2015. ápr. 25. 19:33
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:

Az fscanf eredménye a beolvasott adatok száma, vagyis:

int i, j;

int Result = fscanf(stdin, "%d %d", &i, &j);

a Result értéke 2, ha mindkét számot be tudta olvasni. A Result értékeEOF, ha már elérte a fájl végét. Vagyis:


while (fscanf(...) != EOF) {

...

}

2015. ápr. 25. 19:35
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

Megpróbáltam valamennyi hibát javítani. itt már struktúra van és csak egy ciklus van, ami nem számlálós


do

{

fscanf(adatok, "%d %d %d %d %d\n", &adat.ev, &adat.honap, &adat.nap, &adat.db, &adat.selejt);

}while(!feof(adatok));


De lehet, hogy nem értettük meg egymást. Én konkrétan arra voltam kíváncsi, hogy lehet azt megoldani, hogy ne kelljen ennyiszer kiírni a %d-ket és a hozzá tartozó neveket.

2015. ápr. 25. 19:49
 4/5 anonim ***** válasza:

Sajnos a C és sok más nyelv nem tud végigiterálni egy rekord mezőin, pedig néha jó lenne.

Egyszerűen olvasd be a sort, mint karaktertömböt. Ez már jó arra, hogy eltárold, kiírd.

A karaktertömböt szétszedheted bizonyos karakterek mentén, és a darabokat számmá konvertálhatod. Erre a konverzióra van függvény, de az előzőre nem biztos, C-ből nem rémlik nekem ilyesmi.

2015. ápr. 25. 22:11
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Köszönöm erre voltam kíváncsi.
2015. ápr. 25. 23:04

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!