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

606

    Vastaukset 10

    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. Suomalaisten pinna paloi - Ärsytys iskee uudesta TTK-juontajasta "Eihän tälle voi kun nauraa"

      Oliko Veronica Verho hyvä valinta TTK-juontajaksi? Uuden TTK-juontajan henkilöllisyyttä on arvailtu siitä asti, kun Va
      Suomalaiset julkkikset
      106
      2185
    2. Mitäpä luulet että tykkääkö

      kukaan kaivatustasi ?
      Ikävä
      103
      886
    3. T rakastan sua

      vaikket sitä usko
      Ikävä
      63
      781
    4. Varmaan aika moni

      Haluaisi sinut enemmän kuin mielellään
      Ikävä
      46
      780
    5. Mitä tapahtuu?

      Mitä tapahtuu Humalojalla? Poliiseja talon ympärillä ja paljon ihmisiä pitkin pihoja???
      Haapavesi
      21
      696
    6. Suomi on viittä vaille sodassa Venäjän kanssa...

      ...syynä tähän on kokoomuslainen presidenttimme Stubb. Hän on ainoa eurooppalaisen maan johtaja, joka kärkkäästi ja taha
      Maailman menoa
      510
      684
    7. Olen vähän epävarma siitä, oletko kiltti

      Nainen, ensivaikutelma oli, että olet tosi hyväsydäminen eli siinä mielessä harvinaisuus. Eli et mene virran mukana, etk
      Ikävä
      76
      630
    8. Miksi et lähesty minua

      Jos kerran kaipaat, mies? Mitä pelkäät?
      Ikävä
      60
      570
    9. Herkkä, hellä, aurinkoinen, kaunis upea, valonsäde on hän nainen

      Ja myös fiksu, älykäs ja luonnonläheinen. Erittäin mielenkiintoinen ja kiltti ihminen. Haluan tuntea hänet, koska kaik
      Ikävä
      23
      560
    10. Kai sä olet

      Luovuttanut mun suhteen.
      Ikävä
      57
      551
    Aihe