Hogy lehetne elegánsabban lekódolni c-ben?
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?
Á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?
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) {
...
}
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.
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!