Olisko teillä joku hyvä ohje silmukkojen tekoon, en halua vastaukseksi lue opasta, koska oon lukenu ja en ole ymmärtäny mitään noista while,do, break ja continue silmukan tekemisestä?
Ja samalla kysyn tästä alla olevasta koodistani, että miksi tämä ei toimi:
#include <iostream> using namespace::std; int main() while (1){ int luku = 0; cout << "Arvaa luku! "; cin >> luku; if (luku == 3) { cout << "OIKEIN, se luku kolme"; break; } else if (luku > 3) { cout << "VÄÄRIN"; continue; } else if ( luku < 3) { cout << "VÄÄRIN"; continue; } else { cout << "VÄÄRIN"; continue; } }
Mikä tässä oli väärin? =(
KIITOS ETUKÄTEEN KAIKISTA VASTAUKSISTA! =D
Ota nuo continuet pois. Niin se ei toimi että se palaisi takaisin looppiin jossa se jo on.
main
-funktion sisältö pitää olla aaltosulkujen välissä, siksi tuo ei käänny.
Kyllä nuo continuet sinne minusta kuuluvat.
Ei niiden continuejen tartte mielestäni tuolla turhaa roikkua. Kyseessähän on vain ehtolause. Mutta niistä loopeista.
For ja while silmukka kääntyy kääntäjällä ihan samaksi binaariksi, jos on rakentanut ne samanlailla toimiviksi.
While silmukka eli 'sen aikan kun' on ehkä helpompi käsittää. Ainakin omalla kohdallani oli näin kun aloittelin koodausta C:llä.
Tässä esimerkki while silmukasta:
#include <stdio.h> int main(void) { int x = 1; //Tämä toistorakenne toistaa itseään kymmenen kertaa eli //sillä aikaa kun x on pienempi kuin 10 toista. while(x <= 10) { printf("x = %d", x); //x = x + 1 ++x; } }
For looppi sensijaan on ainakin tällähetkellä mielestäni hiukan nopeampi kirjoittaa
Baglair kirjoitti:
Ei niiden continuejen tartte mielestäni tuolla turhaa roikkua. Kyseessähän on vain ehtolause.
Käsitin niin, että tarkoitus on kysyä kunnes vastaus on oikea. Tietenkin loopin voi myös muuttaa muotoon while (luku != 3)
ja säätää muun ohjelman tuohon sopivaksi.
Oho mun moka. Sen siitä saa ku ei kato tarpeeks tarkasti.
Edit: Mutta nyt kun vielä tarkemmin katoin niin eihän niiden continujen tarttis ollakkaan siellä. Eihän ohjelma keskeydy vasta kun tullaan breakiin.
Mitähän uuta se luku voi muka olla kuin suurempi, pienempi tai sama? Eli viimeinen else-blokki on turha.
Deewiant: käsittääkseni while(1)-silmukka looppaa, kunnes tulee break (tai goto), ihan continue-lauseesta riippumatta =)
Mutta ihan alkuperäiseen kysymykseen vastauksena ovat tosiaan ne main-funktion aaltosulut. Muuten tuo on täysin toimiva ohjelma. (Vaikka mitä järkeä on aina arvata kolmosta, se on sitten eri asia :)
Kiitos neuvoista, nyt se toimii. Ohjelmani oli vain tarkoitus kuvata itselleni silmukoiden tekoa.
Tässä paranneltu koodi:
#include <iostream> using namespace::std; int main(void) { int luku = 0; while (1) { cout << endl << "Arvaa luku!" << endl; cin >> luku; if (luku == 3) { cout << "OIKEIN, se luku on kolme"; break; } else if (luku > 3) { cout << endl << "VAARIN"; continue; } else if ( luku < 3) { cout << endl << "VAARIN"; continue; } else { cout << endl << "VAARIN"; continue; } } }
Metabolix kirjoitti:
Mitähän uuta se luku voi muka olla kuin suurempi, pienempi tai sama? Eli viimeinen else-blokki on turha.
Miten olisi ensimmäiset kaksi else-blokkia. =)
Metabolix myös kirjoitti:
Deewiant: käsittääkseni while(1)-silmukka looppaa, kunnes tulee break (tai goto), ihan continue-lauseesta riippumatta =)
Hyvä pointti, enpä älynnyt.
Yksikin else riittäisi eli tee näin se ehtorakenne
if(luku == 3) { cout << "OIKEIN, se luku on kolme"; break; } else { cout << endl << "VAARIN"; }
No tällä hetkellä yksi else riittää, mutta jos sinne vaikka laittaa vihjeeksi "liian pieni" ja "liian suuri", kuten usein on, niin silloin kaksi. Paitsi että breakin jälkeen ei tarvita elseä, jos nyt aletaan pikkuseikoista viilata.
Metabolix kirjoitti:
No tällä hetkellä yksi else riittää, mutta jos sinne vaikka laittaa vihjeeksi "liian pieni" ja "liian suuri", kuten usein on, niin silloin kaksi.
Ja jos laittaa if
-lauseen jälkeen jotain koodia, tarvitaan continue
t else
-blokkeihin. ;)
... jos haluaa, ettei sitä koodia suoriteta, jos on menty else-blokkiin.
#include <iostream> using namespace::std; int main(void) { int luku = 0; while (1) { cout << endl << "Arvaa luku!" << endl; cin >> luku; if (luku == 3) { cout << "Oikein, kolmehan se oli.\n"; break; } if (luku > 3) { cout << endl << "Liian suuri.\n"; continue; } if (luku < 3) { cout << endl << "Liian pieni.\n"; continue; } cout << "Ei pienempi, ei suurempi, mutta ei samakaan. Jaahas.\n"; } }
Mitä järkeä on sitten koko else:stä jos if:llä voi tehdä saman noin? =D
Mitä järkeä on elää, kun voi kuollakin?
Voi tuon tehdä näinkin jokseenkin yhtä pieneen tilaan:
#include <iostream> using namespace std; // Eikä tungeta tänne kaksoispisteitä! int main(void) { int luku = 0; while (luku != 3) { cout << endl << "Arvaa luku!" << endl; cin >> luku; if (luku == 3) { cout << "Oikein, kolmehan se oli.\n"; } else if (luku > 3) { cout << endl << "Liian suuri.\n"; } else if (luku < 3) { cout << endl << "Liian pieni.\n"; } else { cout << "Ei pienempi, ei suurempi, mutta ei samakaan. Jaahas.\n"; } } }
Aihe on jo aika vanha, joten et voi enää vastata siihen.