Hogyan oldjam meg, hogy fusson a C-s függvényem és úgy, ahogy kell?
pastebin[pont]com/dpjNbipA
(Bocsi, de nem engedi rendesen belinkelni a GYK motorja, szerinte a Pastebin linkrövidítő.)
pastebin.com
Úgy látszik, önmagában a domaint engedi, protokoll nélkül. De válassz ki egy random jegyzetet és próbáld belinkelni, azt már nem fogja.
pastebin[pont]com/ViAx7Kbh
Én így oldanám meg. Pár dolgot nem értettem a kódodban (például, hogy miért olvasol be adatot a standard inputról), úgyhogy inkább újraírtam saját kezűleg.
Ha valamit nem értesz, írj bátran! :)
Köszi a választ, de a kódód sajnos hibaüzeneteket dob:
__tester__.c: In function ‘tobbetkereso’:
__tester__.c:21:15: error: ‘struct tarolo’ has no member named ‘lakas’
if (adatok.lakas[i].lakok >= 1 && adatok.lakas[i].lakok <= 6)
^
__tester__.c:21:45: error: ‘struct tarolo’ has no member named ‘lakas’
if (adatok.lakas[i].lakok >= 1 && adatok.lakas[i].lakok <= 6)
^
__tester__.c:22:7: error: ‘eredmeny’ undeclared (first use in this function)
eredmeny[eredmeny.meret++] = adatok.lakas[i];
^~~~~~~~
__tester__.c:22:7: note: each undeclared identifier is reported only once for each function it appears in
__tester__.c:22:42: error: ‘struct tarolo’ has no member named ‘lakas’
eredmeny[eredmeny.meret++] = adatok.lakas[i];
^
__tester__.c:25:1: error: control reaches end of non-void function [-Werror=return-type]
}
^
Mostanában több hasonló kódot láttam itt a GYIK-en. Közös vonásuk, hogy eléggé nem működnek és nagyon furcsa megoldások vannak bennük.
Az észrevételeim:
0. Valószínűleg nem másoltad be az összes kódot ide, mert ha ezeket összeollózom, akkor vannak alapvető hiányosságok, ellenben az error logodban ezeknek nincs nyoma.
0/a:
struct tarolo valogatott=tobbetkereso(adatok);
Hol van deklarálva az 'adatok' változó?
0/b:
for (i=0; i<valogatott.meret; i++)
Hol van deklarálva az 'i' változó?
1.
int tobbetkereso(struct tarolo adatok) {
Itt a 'struct tarolo adatok' helyes argumentum, viszont az 'adatok' változóval a függvényen belül sehol nem dolgozol. Helyette scanf-fel olvasol be adatokat, aminek szemantikailag semmiképp nem egy kereső függvényben van a helye.
Tehát 41-46. sor kuka, és valahol máshol kell az adatokat megszerezni (lásd még 0/a pont).
2.
int tobbetkereso(struct tarolo adatok)
VS
struct tarolo valogatott=tobbetkereso(adatok)
Most akkor a tobbetkereso() mivel tér vissza? Logikusan (a feladat kiírása alapján, és a már adott kód alapján is) struct tarolo-val, közben mégis úgy írtad meg, hogy int-tel térjen.
3.
struct tarolo;
Ez mi akar lenni? Ismét deklarálod a 'tarolo' struct típust? Nem inkább azt akartad írni, hogy:
struct tarolo talalatok;
Ezzel deklarálva egy 'tarolo' típusú változót. (Illetve ne felejtsd el a 'meret' adattagját 0-ra beállítani.)
4.
struct lakas tomb[20];
Ez pontosan mire kell? A 'tarolo' típusú változóban már van 'tomb' adattag, tudsz vele dolgozni. Ráadásul, ahogy később használod, úgy szemantikailag sincs rá szükség (lásd 1. pont).
5.
for (i = 0; i < 5; i++) {
Miért pont 5? Miért nem inkább az 'adatok'-ban lévő tömb mérete?
6.
if (tomb[i].lakok >= 1 && tomb[i].lakok <= 6)
Nem a 'tomb' változót kéne vizsgálni (lásd 4. pont - nem is kéne, hogy létezzen), hanem inkább az 'adatok' (mint bemenő változó) 'tomb' adattagjának megfelelő sorszámú elemét.
7.
return tarolo.meret
Miért térsz vissza egy cikluson belül a tároló méretével? Ez a kódod legértelmetlenebb része. A kiírt feladatnak ez hol felel meg?
"és kiválogatja belőle azokat, amelyekben a jelenlegi lakók száma adattag értéke 1 és 6 között van"
Értelemszerűen valamilyen lista jellegű adatszerkezettel kellene visszatérni, nem pedig egy mérettel (lásd 2. pont), és főleg nem az első találattal, megtörve a ciklust.
Javaslat: Amennyiben a feltétel teljesül, add hozzá az adott lakást a 'talalatok' tömbjéhez (illetve növeld a méretet).
8.
return i
Hasonló hülyeség, mint a 7. pont. Egyszerűen térj vissza a 'talalatok' változóval.
Kb. ennyi, ezekkel a módosításokkal nálam gond nélkül fordul és fut a program. Szándékosan nem a végleges megoldást küldtem el, inkább egy részletes iránymutatást, hogy meg is értsd, amit csinálsz.
# 6, # 7
struct eredmeny;
Ezzel mi a cél? Deklarálsz egy új, 'eredmeny' típust? Lehet a válaszoló benézte, viszont itt már elég triviális, hogy mit, úgyhogy nem értem a kérdezőt.
Köszi, amennyire tudtam, átírtam, de még mindig nem jó (biztos ebben is vannak hülyeségek). A teljes kódból csak annyit tudni, amennyit bemásoltam a kérdés alatti linkbe. Az adatok változó valahol biztos, hogy deklarálva van a teljes kódban, mert ha én akarom deklarálni, jelzi, hogy már van.
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!