Kezdőoldal » Számítástechnika » Programozás » Fájlban való keresés c-ben?

Fájlban való keresés c-ben?

Figyelt kérdés
Adott a dolgozat.txt állomány, melyben adatok vannak a következő formában: vezetéknév(szóköz)keresztnév(szóköz)1zh(szóköz)2zh(szóköz)3zh(sortörés). Írj programot, melynek segítségével a fájlban keresni lehet vezetéknév, keresztnév vagy az összpontszám alapján. A feltételek között és kapcsolat van.Arról nincsen információnk, hogy hány sort tartalmaz a fájl, ezért nem lehet a feladatot statikus tömbökkel megoldani, de dinamikus tömb se szükséges. Elegendő minden keresés esetén csak a fájlt végig nézni és a keresési feltételnek megfelelő sorokat a képernyőre másolni. Itt persze figyelni kell a fájl szabályos kezelésére (megnyítás - fopen, elérés - fscanf és bezárás - fclose).
2013. ápr. 23. 14:58
 1/6 iostream ***** válasza:
Mi nem megy?
2013. ápr. 23. 15:00
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:

Ezt írtam, még hiányos. Hogy lehetne a fájlvégéig beolvasni, soronként lépni? Ti hogy csinálnátok? Más fajta megoldás is érdekel. Struktúrával meg lehetne csinálni?

Ez így nem működik, futás közben leáll.

int main(){

char vezk[21],kerk[21],vez[21],ker[21],a;

float zh1,zh2,zh3,ossz,osszk;

FILE *be;

printf("Kereses az allomanyban...\n");

printf("Vezeteknev: ");

scanf("%s",vezk);

printf("Keresztnev: ");

scanf("%s",kerk);

printf("Elert osszpontszam nagyobb, mint: ");

scanf("%f",osszk);

be=fopen("dolgozat.txt","r");

printf("A kereses eredmenye:\n");

fscanf(be,"%s %s %f %f %f",vez,ker,&zh1,&zh2,&zh3);

ossz=zh1+zh2+zh3;

if(((vez==vezk)||(vezk=='-'))&&((ker==kerk)||(kerk=='-'))&&((ossz>osszk)||(osszk==-1.0)))

printf("%s %s %f %f %f\n",vez,ker,zh1,zh2,zh3);

fclose(be);

return 0;

}

2013. ápr. 23. 15:06
 3/6 anonim ***** válasza:

Karakterláncokat nem így hasonlítunk össze.

Használd a strcmp függvényt.


A fájlolvasás pedig egy ciklussal.

while(feof(be)!=)

Itt a fájl végéig ismétli a beolvasást. Ezen belül keress soronként.

2013. ápr. 23. 15:11
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:

Bocsi lemaradt a vége.

Tehát nem while(feof(be!=), hanem while(feof(be)==0)

2013. ápr. 23. 15:14
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:

Köszönöm, sikerült megoldani ezt a részét.

Még arra lennék kiváncsi, hogyan lehetne ezt megoldani?

A keresés után a felhasználó döntheti el, hogy kíván-e még keresni? Ha 'i' -t ad meg akkor újra indul a keresés az adatok bekérésévek, ha 'n' akkor vége.

2013. ápr. 23. 16:08
 6/6 anonim ***** válasza:
Az egészet berakod egy ciklusba, az eredmény kírása után bekéred a felhasználó választását és amennyiben i betűt választ nem lépsz ki a ciklusból. Elegánsan hátultesztelő ciklust érdemes használni, lévén egyszer úgyis le kell futtatni a keresést.
2013. ápr. 23. 16:15
Hasznos számodra ez a válasz?

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!