Kezdőoldal » Számítástechnika » Programozás » C-ben csináltam egy viszonylag...

C-ben csináltam egy viszonylag egyszerű függvényt. Miért nem ad megfelelő értékeket?

Figyelt kérdés

Készítenem kell egy C függvényt beker néven, ami vár 2 egész számot cím szerinti paraméter átadással, és ezt csinálja:


A függvény egy egész számot olvasson be, de úgy, hogy a szám 318 és 405 között legyen. A határok még közte vannak.


A függvény addig olvassa be egy egész szám értékét, amíg az nem teljesíti a feltételt. Amint kijött egy megfelelő, a bekérés álljon le. A függvény állítsa be az első paraméterének értékét arra, hogy mi a véglegesen bekér szám, a másik paramétert pedig arra, hogy hányadik bekérésre sikerült megfelelő értéket kapni.


Részletek a teljes programból:


int szam, hanyatolvas;

beker(&szam, &hanyatolvas);

printf("%d\n", szam);

printf("%d\n", hanyatolvas);


Megírtam ezt a kódot:


int beker()

{

int szam=0, hanyatolvas=0;

while (szam < 318 || szam > 405)

{

hanyatolvas++;

scanf("%d", &szam);

}

return 0;

}


Ezzel az a baj, hogy a kelleténél vagy sokkal nagyobb, vagy sokkal kisebb számokat ad ki. Ha printf-et is írok a függvénybe, akkor kiírja a megfelelő számokat IS és a rosszakat IS, de utóbbiakat nem tudom eltávolítani, mert az a függvényen kívüli printf bele van már "égetve" a programba, ezért a függvényen kell alakítani.



2019. okt. 19. 22:36
 1/7 anonim ***** válasza:
18%

while (szam < 318 || szam > 405)


Ez egy VAGY kapcsolat. Vagy 318-nál kisebb, vagy 405-nél nagyobb. Pontosan azt csinálja a program, amit kész tőle.


A szöveges leírásod szerint te 318 és 405 KÖZÖTTI számokat szeretnél, azaz (szam > 318 && szam < 405). De ebben még a határok nincsenek benne, azaz vagy <=, vagy eggyel nagyobb/kisebb számokat írsz.

2019. okt. 19. 22:41
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:
Köszi, de hiába írom azt át, még mindig rossz számokat dob a tesztelő: [link]
2019. okt. 19. 22:56
 3/7 anonim ***** válasza:
48%

#1 A feltétellel semmi gond nincs, addig fut a beolvasás, amíg a szám KÍVÜL van az adott határokon. A probléma ott van, és nem is értem ez miért fordul egyáltalán le (de apparently, lefordul), hogy a beker függvénynek egy szem paramétere sincs. Hiába adod át a függvényhívásnál a két változót, ha a függvény egy darabot sem vár.


Helyesen pl valahogy így fest a függvény:



int beker(int* szam_out, int* hanyatolvas_out)

{

    int szam=0, hanyatolvas=0;

   

    while (szam < 318 || szam > 405)

    {

        hanyatolvas++;

   

        scanf("%d", &szam);

   

    }

   

    *szam_out = szam;

    *hanyatolvas_out = hanyatolvas;   

   

    return 0;

}

2019. okt. 19. 22:58
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

Igen, mert az első hülyeséget írt. Nem az a hiba.

A két kódrészletnek mi köze van egymáshoz?

Az elején van egy beker függvényed két paraméterrel, majd van egy függvényed paraméter nélkül.

Hol írod ki a mit?

2019. okt. 19. 22:59
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:
Köszi a válaszokat, elfogadta a 3. válaszoló kódját, ment a zöld kéz. Próbáltam én is kitölteni a paraméter részt, sikertelenül. Most már tudom, hogy mire jó az int*.
2019. okt. 19. 23:12
 6/7 anonim ***** válasza:
Dehogy tudod mire jó.
2019. okt. 19. 23:44
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

Ahogy fentebb írták, a beker() függvényedet nem érdekli az eredeti szam és hanyatolvas változó, hanem deklarál magának sajátot, ami a return után meg is szűnik. Nem is értem, miért deklaráltad ott is. Olvass utána a paraméterek fajtáinak, formális, aktuális paraméterlistának, cím- és érték szerinti paraméterátadásnak, stb., és egyáltalán mi az a függvényparaméter. (Gonoszság nélkül; a ""mire jó az int*"" kijelentésed alapján ezekre az infókra szükséged lesz.)

int beker() {

int szam=0, hanyatolvas=0; // <--- ???

2019. okt. 20. 12:01
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!