Pulmanani on se, että haluan saada silmukan päättymään ohjelmassa seuraavasti:
-silmukkalaskurille on vakioarvo, jonka tullessa vastaan arvojen syöttäminen silmukkaan lopetetaan ja ohjelma poistuu silmukasta. Siis esimerkiksi vakioarvo on 5, jolloin viidennen arvon syöttämisen jälkeen ohjelma poistuu silmukasta.
JA
-silmukkalaskurille on annettu vakiona vartija-arvo, jonka syöttäminen saa ohjelman poistumaan silmukasta. Esim vartija on määritelty -1000:ksi, jolloin tuo syöttötieto lopettaa silmukan.
Pulmanani on, että en tahdo saada noita kahta ehtoa (maksimiarvo ja vartija) toimimaan samaan aikaan. Jos käytän maksimiarvoa, niin silmukkalaskuri ei noteeraa vartija-arvoa ja päinvastoin. Miten tuo samanaikaisuus mahdetaan tehdä?
-silmukkalaskurille on vakioarvo, jonka tullessa vastaan arvojen syöttäminen silmukkaan lopetetaan ja ohjelma poistuu silmukasta. Siis esimerkiksi vakioarvo on 5, jolloin viidennen arvon syöttämisen jälkeen ohjelma poistuu silmukasta.
JA
-silmukkalaskurille on annettu vakiona vartija-arvo, jonka syöttäminen saa ohjelman poistumaan silmukasta. Esim vartija on määritelty -1000:ksi, jolloin tuo syöttötieto lopettaa silmukan.
Pulmanani on, että en tahdo saada noita kahta ehtoa (maksimiarvo ja vartija) toimimaan samaan aikaan. Jos käytän maksimiarvoa, niin silmukkalaskuri ei noteeraa vartija-arvoa ja päinvastoin. Miten tuo samanaikaisuus mahdetaan tehdä?
Vastaukset 11
Vanhimmat
pistät sinne looppiisi tämmösen jutun:
if(annettu_arvo == -1000)
break;
eli jos annettu_arvo on -1000 hypätään ulos loopista breakilla.
Hyi hyi, break ja continue ovat hyvin läheistä sukua goto-lauseelle ja ne ovat siksi syvältä. Ainoa paikka missä noita voi käyttää on switch ja sekin syntaktisista syistä.
siinä tuli taas niin asiantunteva kommentti ettei mitään rajaa
Usein on parempi käyttää rehellisesti break ja continue käskyjä, kuin epämääräisiä apumuuttujia tai syviä ehtorakenteita. Näin ohjelma pysyy selkeämpänä, kuin myös nopeampana. Varsinkin While lauseen kanssa break ja continue ovat usein näppäriä.
käyttänny breakkia muussa kuin switchimielessä. Puolipistettä on nopeanpi käyttää ihan huvikseenkin kuin, että alkaa kirjottaan kokonaista breakkia vaikka oiskin autocompletet ja kaikki päällä.
break ja continuen käyttö selkeyttää koodia huomattavasti ja ehkäisee bugeja. otetaampas joitain esimerkkejä
for(int i = 0; i < luku; i )
{
...
if(joku == jotain) i = luku; // poistu loopista
}
vs
for(int i = 0; i < luku; i )
{
...
if(joku == jotain) break; // poistu loopista
}
nyt jos for-silmukan yläarvo muuttuu niin ensimmäisen esimerkin if-ehto voi helposti unohtua päivittämättä. sitäpaitsi break on selkeä ja ymmärtää heti ensi näkemältä että nyt ollaan poistumassa silmukasta. break kaiken lisäksi poistuu välittömästi, ja ilman sitä aiheutuu helposti vain ylimääräistä if-else-sotkua.
entäs continue?
while(ehto)
{
...
if(syöte == arvo1)
{
...
if(syöte2 == arvo2)
{
... // tee jotain
}
}
}
vs
while(ehto)
{
if(syöte != arvo1) continue;
...
if(syöte2 != arvo2) continue;
... // tee jotain
}
continuen käyttö vähentää sisäkkäisten blokkien määrää ja tässä tapauksessa tekee koodista huomattavasti selkeämpää.
kyllä molempia, break ja continue, kannattaa käyttää aina sen sijaan että alkaa kikkailemaan ylimääräisillä apumuuttujilla tai iffeillä...
kyllä niitä voi käyttää(siks kai ne on mukaan ympätty) ja break; ja continue; selkeyttää koodia, mutta pitää myös muistaa se, että jos silmukka halutaan suorittaa vielä viimeisen kerran "loppuun" niin silloin tuo break ei käy kun sehän poistuu silmukasta välittömästi. continue;:sta en juuri nyt muista miten se käyttäytyi. tietenkin se mitä arvoja vertaillaan ja minkä takia ja mihin niitä myöhemmin käytetään, vaikuttaa aika paljon break;:in käyttöön.
if(jokuluku == 5 && jokutoinenluku == -1000){break;}
Niin, kyllä breakille, ja continuellekin jopa on aikansa ja paikkansa, mutta loopin lopettamikseksi järkevintä on kuitenkin laittaa ne lopetusehdot niille kuuluviin paikkoihin:
for (;a == loppu && b == loppu;)
while (a!=loppu || b!=loppu)
ennalta tiedettyjen lopetusehtojen tarkistaminen if-lauseella loopin sisällä ja sen jälkeen breakin käyttäminen on typerää ja huonoa ohjelmointia.
niin joka kerta vielä yhdellä turhalla elsellä looppias täytät. Kannattaa heti ohjelmoinnin alussa itsellensä selvittää, kuinka iffiäkin pitää käyttää, niin ei tartte koodia turhilla ponppukomennoilla täyttää: oikeaoppisestihan se menee paljon vähemmillä näppäilyilläkin näin, että:
for(int i = 0; i < luku; i )
{
...
if(joku == jotain); //break; tuo oli ihan turhaa nappailyasi jo siitakin syysta, etta iillasi ei ole mitaan virkaa tuon lohkon ulkopuoleisessa koodissa, joten kommentoin sen siitakin syysta, mutta jatin kuitenkin sen iffin siihen että ymmärrät, kuinka puolipistettä käytetään// poistu loopista
//nainhan se menee kaiken oikean ohjelmointijärjen mukaisesti
i--;
// jos ii olisi maaritelty siten, etta silla olisi jotain virkaa eli kayttoa taman lohkon ulkopuoleisessa koodissa. Talla oikealla tavalla saastettiin nain pienessa ohjelmointiajassa jo kaksi (2) nappailya ja miljoonassa loopissa se tekee kaksimiljoonaa (2000000) näppäilyä...
}
onnistunee vaikka näin käyttäen &&(JA) operaattoria ja for silmukkaa
int laskuri, arvo;
for(laskuri=0, arvo=0; arvo != -1000 && laskuri < 5; laskuri )
{
cin>>arvo;
jne..
}
'vahtikoiraa' http://www.google.fi/search?hl=fi&q=watchdog c&btnG=Hae&meta= ohjelmallisesti? Eipä taida helposti onnistua?
Raudassa valmiina:
http://www.google.fi/search?hl=fi&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=watchdog embedded&spell=1