Looppi-ongelma

En saa tätä harjoitus tehtävää toimimaan oikein vaan se alkaa lopuksi printtaamaan tähtiä ikuisesti kestävässä silmukassa. Missä vika? Kiitos jo etukäteen!

Tässä on tehtävänanto:
http://cs.stadia.fi/~silander/ohjelmointi/c_opas-Teht_aum-13.html

Ja tässä mitä sain aikaan:

#include
int main(void){
int arvos[6];
int luku,lkm=0,summa=0;

while (luku != 6){
printf("\nAnna arvosana[1-5], [6] lopettaa :");
scanf("%d", &luku);

while ((luku < 1) || (luku > 6)) {
printf("\nVirhe! Syötä luku väliltä 1-6.");
printf("\nAnna Arvosana[1-5], [6] lopettaa :");
scanf("%d", &luku);
}

if (luku != 6){
arvos[luku] ;
}
}

int i;
for (i=0;i0) {
int k;
for (k=0;k
6385
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

Et tyhjennä missään vaiheessa taulukkoa
int arvos[6];

Siellä voi olla mitä tahansa arvoja sisällä alustamattomana.

Äänestä
  • joo, tuopa sieltä unohtui. Kiitos paljon!

    Äänestä

  • Mitä tuo "taulukon tyhjentäminen" oikeastaan tarkoittaa? Miten se tehdään?

    Äänestä

  • C-breaker kirjoitti:

    Mitä tuo "taulukon tyhjentäminen" oikeastaan tarkoittaa? Miten se tehdään?

    Se tarkoittaa samaa kuin alustaminen. Eli alustetaan taulukon kaikki alkiot vaikka arvoon nolla.

    jos esim sulla on taulukko:
    int taulu[5] = {2,3,5,6,7};
    niin voit alustaa taulukon vaikka for-silmukassa:

    for(int i=0; i

    Äänestä

Ote ohjelmasta:

while ((luku < 1) || (luku > 6))

Olen vähän itsekin noviisi näissä jutuissa, mutta eikös tuossa while:n jälkeen riittäisi yhdet sulut ilman noita sisempiä.

Edelleen jos halutaan syöttää lukuja yhdestä viiteen, niin eikö tuon pitäisi olla luku > 5?

Äänestä
  • en tiedä voiko sulut jättää pois, mutta noin toimii ainakin..

    Eikun tuo while- looppi tulostaa virheilmoituksen mikäli käyttäjä näppäilee luvun joka on pienempi kuin 1 ja suurempi kuin 6 (6 oli numero jolla ohjelma lopetetaan = sallittu numero)

    itseasiassa tuossa oli mulla vielä pieni virhe että nollaa ei voinut syöttää vaikka arvosanoja piti voida syöttää 0-5.. no pistetäänpä tähän vielä mun lopullinen koodinpätkä ja ammattilaiset voi kommentoida jos tässä jotain voisi tehdä paremmin, thx :)

    #include
    int main(void){
    int arvos[6]={0};
    int luku;
    int lkm=0;
    int summa=0;

    while (luku != 6){
    printf("\nAnna arvosana[0-5], [6] lopettaa :");
    scanf("%d", &luku);

    while ((luku < 0) || (luku > 6)) {
    printf("\nVirhe! Syötä luku väliltä 1-6.");
    printf("\nAnna Arvosana[1-5], [6] lopettaa :");
    scanf("%d", &luku);
    }

    if (luku != 6){
    arvos[luku]++;
    }
    }

    int i;
    for (i=0;i0) {
    lkm+=arvos[i];
    summa+=i*arvos[i];
    int k;
    for (k=0;k

    Äänestä

Kommentoi aloitusta


C-noviisi kirjoitti:

En saa tätä harjoitus tehtävää toimimaan oikein vaan se alkaa lopuksi printtaamaan tähtiä ikuisesti kestävässä silmukassa. Missä vika? Kiitos jo etukäteen!

Tässä on tehtävänanto:
http://cs.stadia.fi/~silander/ohjelmointi/c_opas-Teht_aum-13.html

Ja tässä mitä sain aikaan:

#include
int main(void){
int arvos[6];
int luku,lkm=0,summa=0;

while (luku != 6){
printf("\nAnna arvosana[1-5], [6] lopettaa :");
scanf("%d", &luku);

while ((luku < 1) || (luku > 6)) {
printf("\nVirhe! Syötä luku väliltä 1-6.");
printf("\nAnna Arvosana[1-5], [6] lopettaa :");
scanf("%d", &luku);
}

if (luku != 6){
arvos[luku] ;
}
}

int i;
for (i=0;i0) {
int k;
for (k=0;k

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