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

570

    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. 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. Vuod
      Ikävä
      22
      5194
    2. Huomenta ihana

      Kauniskasvoinen ihanuus 😘 saan sut vielä
      Ikävä
      25
      4378
    3. Hei rakas...

      Miten on työpäivä sujunut? Rakastan sinua 💗
      Ikävä
      27
      2501
    4. Edelleen sitä on vaikea uskoa

      Että olisit oikeasti rakastunut muhun
      Ikävä
      34
      2264
    5. Toiveikas vai toivoton

      torstai? Ajatuksia?
      Ikävä
      37
      1998
    6. Vitsi mihin menit. Heti takasin.

      Mä näin sut tuu takasin! Oli kiire, niin en ehtiny sin perään!
      Ikävä
      15
      1918
    7. En ole koskaan kokenut

      Ennen mitään tällaista rakastumista. Tiedän että kaipaan sinua varmaan loppu elämän. Toivottavasti ei tarvitsisi vain ka
      Ikävä
      19
      1607
    8. Mukavaa päivää

      Mun rakkauden kohteelle ❤️ toivottavasti olet onnellinen
      Ikävä
      12
      1531
    9. 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 kons
      Suomalaiset julkkikset
      21
      1267
    10. Kerranki asiat oikein

      Ilkka ja muut pienpuolueeet...teitte hyvän työn kun valitsitte pätevän henkilön virkaan eikä kepulle passelia!! Jatkakaa
      Haapavesi
      10
      1174
    Aihe