Tarkistussilmukka pielessä?

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;
      }
10607
Äänestä

Muut lukivat myös

Vastaukset 10

Vanhimmat

(arvosana < 1 || arvosana > 5) ?

Äänestä

Ylempänä tuli jo yksi korjaus. Lisäksi virheelliset sekä lopetusarvot lisätään tuossa versiossa summaan.

Äänestä
  • Minummielestä VARTIJA pitää kirjottaa pienellä näin: vARTIJA

    Äänestä

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

    Äänestä

  • 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

    Äänestä

  • 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.

    Äänestä

  • 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.

    Äänestä

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

Äänestä

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

Äänestä

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

Äänestä

Kommentoi aloitusta


Hamppuravatti kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu