Kezdőoldal » Számítástechnika » Programozás » Hogyan oldjam meg, hogy...

Hogyan oldjam meg, hogy fusson a C-s függvényem és úgy, ahogy kell?

Figyelt kérdés

pastebin[pont]com/dpjNbipA


(Bocsi, de nem engedi rendesen belinkelni a GYK motorja, szerinte a Pastebin linkrövidítő.)



2019. nov. 8. 22:07
1 2
 1/11 anonim ***** válasza:
0%
pastebin.com
2019. nov. 8. 22:23
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:

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.

2019. nov. 8. 22:27
 3/11 anonim ***** válasza:
Miert nem szakforumon kerdezel?!
2019. nov. 8. 22:55
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:

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! :)

2019. nov. 9. 11:25
Hasznos számodra ez a válasz?
 5/11 A kérdező kommentje:

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]

}

^

2019. nov. 9. 11:40
 6/11 anonim ***** válasza:
Elnézést, én néztem be. Itt a javított kód: pastebin[pont]com/kMawz24m
2019. nov. 9. 11:50
Hasznos számodra ez a válasz?
 7/11 A kérdező kommentje:
Köszi, így már majdnem lefut, de az "eredmeny" nincs rendesen deklarálva.
2019. nov. 9. 11:59
 8/11 anonim ***** válasza:

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.

2019. nov. 9. 12:04
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:

# 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.

2019. nov. 9. 12:10
Hasznos számodra ez a válasz?
 10/11 A kérdező kommentje:

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.


[link]

2019. nov. 9. 18:05
1 2

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!