Kezdőoldal » Számítástechnika » Programozás » Miért nem működik a || (vagy)...

Miért nem működik a || (vagy) funkció while-ban? (C++)

Figyelt kérdés

tegyük fel van x=10 és y=15

csinálok egy while folyamatot amiben x és y értéke csökken(x--; y--).

Azt szeretném, hogyha x==5 vagy y==11 akkor álljon le a while folyamat.


Én így csináltam de nem jó ( elfut a program a codeblocks nem érzékel hibát de a kívánt funkcio nem működik):


while(x==5==false || y==11==false)

{

x--;

y--;

}


mi lehet a gond?


2012. ápr. 7. 20:51
 1/7 anonim ***** válasza:

while(x==5==false || y==11==false)

Ez meg mi???


Ilyet nem csinálunk SOHA!


while(x==5 || y==11)


Soha ne írj így 3 tagú feltételt...

Ha meg tagadni kell, ott a ! jel!

Pl.:

while(x!=5 || y!=11)

2012. ápr. 7. 21:19
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:
a te módszereddel sem működik
2012. ápr. 7. 21:29
 3/7 anonim ***** válasza:

Mert ő nem a megoldást írta, csak egy óriási hibára világított rá.


while (x > 5 || y > 11){

x--;

y--;

}

2012. ápr. 7. 23:54
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

Na, még én is elrontottam...


while (x > 5 && y > 11){

x--;

y--;

}

2012. ápr. 7. 23:55
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:

De, tökéletesen működik, csak logikai hibás a kódod.

(Csak a formai hibára kérdeztél rá...)


Ugyanis a while addig megy, amíg igaz a feltétel.

Tehát pl:


x = 5, x = 12 -> 5 != 5 hamis, de 12 != 11 igaz -> hamis vagy igaz => igaz -> fut tovább


x = 6, y = 11 -> 6 != 5 igaz, de 11 != 11 hamis -> igaz vagy hami => igaz -> fut tovább


x = 8, y = 18 -> 5 != 8 igaz, 18 != 11 igaz -> igaz vagy igaz => igaz -> fut tovább


x = 5, y = 11 -> 5 != 5 hamis, 11 != 11 hamis -> hamis vagy hamis => hamis -> megáll



Gondold át, hogy mit is akarsz elérni.

(Végre egy jó példa, hogy miért is kell a programozáshoz matematika. Ez itt színtiszta logika.)

2012. ápr. 8. 00:08
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
@Laciii: Csak megelőztél, de MOST világítottam rá a hibára egy hosszabb megszólalással. :)
2012. ápr. 8. 00:09
Hasznos számodra ez a válasz?
 7/7 iostream ***** válasza:

Hogy a "háromtagú" (nem igazán az) összehasonlítás miért nem működik (működik, csak nem úgy, ahogy elvárnád).


Az == operátor balról jobbra asszociatív, azaz az

a == b == c kifejezés zárójelezése a következő lesz: (a == b) == c. Azaz kiértékeli, hogy (a == b), és ennek a bool eredményét veti össze c-vel.

Azaz a te feltételed egyenként tökéletesen ellenőrzi, hogy x elérte már az ötöt, egyszerűbben így írhattad volna le: while(x != 5 || y != 11)


Az más kérdés, hogy ez nem azt ellenőrzi, amit te szeretnél. Itt, ha nem egyszerre érik el, akkor valamelyik jó lesz, tehát tovább fog futni. Próbáld ki mondjuk x = 10 és y = 16-al, le fog állni.

2012. ápr. 8. 07:43
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!