Olen kirjoittamassa ohjelmaa, jossa syötetään arvosanoja. Arvosanoista lasketaan keskiarvo.
Tämä alla oleva tarkistussilmukka ilmeisesti ei jostain syystä kelpaa. Osaisko joku sanoa mitä vikaa siinä on. Ideana siis on, että vain luvut 1-5 kelpaavat arvosanoiksi.
while(arvosana != VARTIJA && arvosana < 1 || arvosana > 5)
{
printf("\nVain luvut 1-5 kelpaavat (99 lopetukseen)");
printf("\nAnna ensimmäinen arvosana > ");
scanf("%d", & arvosana);
summa = arvosana;
}
Tarkistussilmukka pielessä?
10
570
Vastaukset
- ...
(arvosana < 1 || arvosana > 5) ?
- korjauksia
Ylempänä tuli jo yksi korjaus. Lisäksi virheelliset sekä lopetusarvot lisätään tuossa versiossa summaan.
- CÄijö
Minummielestä VARTIJA pitää kirjottaa pienellä näin: vARTIJA
- Hamppuravatti
Kirjoitin tuon silmukkarakenteen hieman uusiksi. Ohjelma toimii nyt kuten pitääkin sisempää silmukkaa (lukuvälitarkistus) lukuunottamatta. Sanoisitko miten tuon sisemmän silmukan ehto pitäisi kirjoittaa, jotta se lopettaa VARTIJAN arvolla?
while(luku != VARTIJA)
{
while(luku < 1 || luku > 5)
{
printf("\nVain luvut 1-5 kelpaavat (%d lopetukseen)", VARTIJA);
printf("\nAnna sopiva luku > ");
scanf("%d", & luku);
} - snöööög
Hamppuravatti kirjoitti:
Kirjoitin tuon silmukkarakenteen hieman uusiksi. Ohjelma toimii nyt kuten pitääkin sisempää silmukkaa (lukuvälitarkistus) lukuunottamatta. Sanoisitko miten tuon sisemmän silmukan ehto pitäisi kirjoittaa, jotta se lopettaa VARTIJAN arvolla?
while(luku != VARTIJA)
{
while(luku < 1 || luku > 5)
{
printf("\nVain luvut 1-5 kelpaavat (%d lopetukseen)", VARTIJA);
printf("\nAnna sopiva luku > ");
scanf("%d", & luku);
}while (1
- snöööög
Hamppuravatti kirjoitti:
Kirjoitin tuon silmukkarakenteen hieman uusiksi. Ohjelma toimii nyt kuten pitääkin sisempää silmukkaa (lukuvälitarkistus) lukuunottamatta. Sanoisitko miten tuon sisemmän silmukan ehto pitäisi kirjoittaa, jotta se lopettaa VARTIJAN arvolla?
while(luku != VARTIJA)
{
while(luku < 1 || luku > 5)
{
printf("\nVain luvut 1-5 kelpaavat (%d lopetukseen)", VARTIJA);
printf("\nAnna sopiva luku > ");
scanf("%d", & luku);
}while (!(luku < 1 || luku > 5))
Jota ehkä yritit. - Hamppuravatti
snöööög kirjoitti:
while (1
Tuo ei ole vastaus esittämääni kysymykseen, koska tarkistussilmukka toimii esittämänäni versiona kun syötetään arvoja, jotka ovat pienempiä kuin 1 tai suurempia kuin 5.
Pulmanani on saada tuo sisempi tarkistussilmukka toimimaan siten, että jos sen kuluessa syötetään VARTIJA:ssa määritelty arvo (99), niin koko ohjelman tulisi loppua.
- c-burnout
Jos sisäkkäiset while silmukat menevät solmuun niin on joskus parempi tehdä se toisin. Ja sen sijaan että tarkistaa kaikki ehdot while silmukoissa, ne voi yhtä hyvin tarkistaa erillisillä if-lauseilla jolloin voi paremmin kontrolloida mitä ohjelma tekee missäkin vaiheessa. Itse toteuttaisin ohjelman esimerkiksi tällä tavalla (vaihtoehtoisia tapoja on toki monia monia muitakin):
#include
#define VARTIJA -1
int main(void)
{
int luku = 0;
int summa = 0;
int maara = 0;
printf("\nAnna lukuja 1-5 joista lasketaan summa ja keskiarvo. (%d lopetukseen)\n", VARTIJA);
do {
printf("Anna sopiva luku > ");
scanf("%d", & luku);
if (luku >= 1 && luku - c-burner
Foorumi toimii taas päin helvettia, joten moneskohan kerta on kun yritän saada tän viestin lähetettyä. No tässä mun tapa ratkaista ongelma (ellei ole pakko käyttää kahta while -silmukkaa):
#include
#define VARTIJA -1
int main(void)
{
int luku = 0;
int summa = 0;
int maara = 0;
printf("\nAnna lukuja 1-5 joista lasketaan summa ja keskiarvo. (%d lopetukseen)\n", VARTIJA);
do {
printf("Anna sopiva luku > ");
scanf("%d", & luku);
if (luku >= 1 && luku - c-burner
Foorumi toimii taas päin helvettia, joten moneskohan kerta on kun yritän saada tän viestin lähetettyä. No tässä mun tapa ratkaista ongelma (ellei ole pakko käyttää kahta while -silmukkaa):
#include
#define VARTIJA -1
int main(void)
{
int luku = 0;
int summa = 0;
int maara = 0;
printf("\nAnna lukuja 1-5 joista lasketaan summa ja keskiarvo. (%d lopetukseen)\n", VARTIJA);
do {
printf("Anna sopiva luku > ");
scanf("%d", & luku);
if (luku >= 1 && luku
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Tänään pyörit ajatuksissa enemmän, kun erehdyin lukemaan palstaa
En saisi, silti toivon että sinä vielä palaat ja otetaan oikeasti selvää, hioituuko särmät ja sulaudummeko yhteen. Vuod225194- 254378
- 272501
- 342264
- 371998
- 151918
En ole koskaan kokenut
Ennen mitään tällaista rakastumista. Tiedän että kaipaan sinua varmaan loppu elämän. Toivottavasti ei tarvitsisi vain ka191607- 121531
Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...
Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons211267Kerranki asiat oikein
Ilkka ja muut pienpuolueeet...teitte hyvän työn kun valitsitte pätevän henkilön virkaan eikä kepulle passelia!! Jatkakaa101174