Tarkistussilmukka pielessä?

Hamppuravatti

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;
      }

10

535

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • ...

      (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

    1. En usko et meistä tulee jotain

      Se ei kuitenkaan estä toivomasta et tulisi. Toivon et voitas suudella ja se sais asioita loksahtamaan paikoilleen. Jutel
      Ikävä
      10
      2710
    2. Kuvaile itseäsi

      Kaivatullesi, niin että hän sinut tunnistaa.
      Ikävä
      94
      2001
    3. Eini paljastaa nuorekkuutensa salaisuuden - Tämä nousee framille: "Se on pakko, että jaksaa!"

      Discokuningatar Eini on täyttänyt upeat 64 vuotta. Lavoilla ja keikoilla nähdään entistä vapautuneempi artisti, joka ei
      Suomalaiset julkkikset
      40
      1518
    4. Huomenta keskipäivää

      Kivaa päivää mukaville ja söpösille. 🐺🫅❤️☕☀️
      Ikävä
      260
      1398
    5. Yli puolella maahanmuuttajalapsista ei ole tietoja ja taitoja, joilla selviää yhteiskunnassa

      Miksi Suomeen otetaan väkeä jolla on älyvajetta? https://www.hs.fi/politiikka/art-2000010730220.html
      Maailman menoa
      274
      1059
    6. Oletko koskaan katunut kun

      elämäsi tilaisuus jäi käyttämättä? 💔
      Ikävä
      69
      969
    7. Olen J-mies

      Jos kerrot sukunimeni alkukirjaimen, ja asuinpaikkakuntani. Lupaan ottaa yhteyttä sinuun.
      Ikävä
      47
      891
    8. Sinusta näkee että

      Kaipaat paljon.
      Ikävä
      55
      874
    9. Ei sitten, ei olla enää

      Missään tekemisissä. Unohdetaan kaikki myös se että tunsimme. Tätä halusit tämän saat. J miehelle. Rakkaudella vaalea na
      Ikävä
      77
      870
    10. Haluaisin ottaa sinut syleilyyni mies

      Olet suloinen...
      Ikävä
      44
      785
    Aihe