C++ koodi ongelma

Teen sellaista ohjelmaa, jossa kysytään 3 lukua ja ne pitäisi tulostaa nousevassa järjestyksessä eli pienimmästä suurimpaan.
Olen yrittänyt saada ohjelmaa toimimaan koko eilisen illan ja tämän päivän, mutta tuloksetta, voisiko joku olla ystävällinen ja auttaa minua tässä.
Laitan tähän koodin, jonka olen tehnyt.Siinä voi kyllä olla paljonkin virheitä, sillä olen vasta äskettäin alkanut opiskelemaan tätä C .

Koodi on tällainen:

#include

void main()
{
int   lukua,lukub,lukuc,tulostus;


   printf("Anna kolme lukua
");
   scanf("%d,%d,%d",&lukua,&lukub,&lukuc);
   scanf("%d,%d,%d",&lukub,&lukua,&lukuc);
   scanf("%d,%d,%d",&lukub,&lukuc,&lukua);
   scanf("%d,%d,%d",&lukua,&lukuc,&lukub);
   scanf("%d,%d,%d",&lukuc,&lukub,&lukua);
   scanf("%d,%d,%d",&lukuc,&lukua,&lukub);



   if (lukua
232034
Äänestä

Muut lukivat myös

Vastaukset 23

Vanhimmat

Ellei ole mitään todella tähdellistä syytä säilyttää luvut oikeissa kohdissaan on paljon järkevämpää ensin järjestää ne, ja vasta sitten printata.

C/C :aa en osaa, mutta voin antaa esimerkin järjestämisestä pythonilla, soveltaminen ei pitäisi olla erityisen vaikeaa. Jos ambitiota rittää, tämän voi tehdä _paljon_ näppärämmin/yleisemmin.

def sort(a, b, c):
if b < a:
tmp = a
a = b
b = tmp
if c < b:
tmp = b
b = c
c = tmp
if b < a:
tmp = a
a = b
b = tmp
print a, b, c

Äänestä
  • Koodiesimrkissä pitäisi olla tab-lyöntejä. Yksi ennen jokaista "if" riviä, yksi ennen "print" riviä, nolla ennen "def" riviä ja kaksi ennen kaikkia muita.

    Tyylikkämpää on jos lisäät yhden koko viimeiselle if-blokille.

    Jostakin syystä foorumi söi tabulattorit...

    Äänestä

En ole mikään c guru itsekään mutta tein toimivan(?) esimerkin, joka toimii samalla periaatteella kuin sinun ohjelmasi paitsi näyttää luvut päinvastaisessa järjestyksessa;)

int main()
{
int a, b, c;

printf("Syötä kolme lukua:");
while( scanf("%d %d %d", &a, &b, &c) != 3 );

if( a>=b && a>= c) {
/* a suurin */
if(b>=c) {
printf("a:%d, b:%d, c:%d", a, b, c);
}
else {
printf("a:%d, c:%d, b:%d", a, c, b);
}
}
else if( b>=a && b>=c ) {
/* b suurin */
if(a>=c) {
printf("b:%d, a:%d, c:%d", b, a, c);
}
else {
printf("b:%d, c:%d, a:%d", b, c, a);
}

}
else {
/* c suurin */
if(a>=b) {
printf("c:%d, a:%d, b:%d", c, a, b);
}
else {
printf("c:%d, b:%d, a:%d", c, b, a);
}
}
return 0;
}

Kuten varmaan huomaat tällä periaatteella tulee helposti melkoista if-lause viidakkoa ja ohjelman koko paisuu melkoisesti. Suosittelisin lukemaan numerot taulukkoon ja järjestämään taulukon paikallaan pienessä aliohjelmassa. Näin samalla periaatteella voit lukea vaikka 100 lukua tarvitsematta juurikaan ohjelmaa muuttaa tai kirjottaa tuhansia if lausekkeita :)

Äänestä
  • Nyt tein hieman paremman ratkaisun.. tosin tämäkin on kaukana vielä täydellisestä ;)

    Ohjelma varaa muistin numeroille dynaamisesti mallocilla, joten kysyttävien numeroiden lukumäärää ei tarvitse hitsata kiinni edeltä käsin (vaikka tässä on niin tehtykin).

    Numerot luetaan merkkijonoina puskuriin josta ne sitten muutetaan atoi -funktiolla numeroiksi. -Tällä vältytään ohjelman kaatumiselta jos käyttäjä syöttää muita kun numeroita.

    Kun numerot on luettu, järjestetään taulukko yksinkertaisella bubblesort menetelmällä ja tulostetaan numerot.

    Tulihan tällekin yllättävä määrä rivejä, mutta en koittanutkaan tehdä erityisen kompaktia ;) Ainakin ohjelmaa on helpompi muuttaa lukemaan vaikka 100 numeroa!

    #include
    #include

    int *kysy_n_lukua(int lkm);
    void vaihda(int *a, int *b);
    void jarjesta(int *taulukko, int koko);

    int main()
    {
       int *taulukko, i, lkm;
       lkm = 10;

       taulukko = kysy_n_lukua(lkm);

       if(!taulukko) {
          printf("Muistin varaaminen epäonnistui!
    ");
          return(1);
       }
       else
       {
          /* jarjesta taulukko */
          jarjesta(taulukko, lkm);

          /* tulostetaan taulukko */
          for(i=0;i

    Äänestä

  • Kiitos neuvoista keijo, ne auttoivat, mutta en saanut vieläkään ohjelmaani toimimaan oikein. Ohjelmani tulostaa vain luvun a, ei lukuja b ja c ja tulostus tulee aina vain samassa järjestyksessä eli a,b,c, eikä se ota huomioon sitä, että ne olisivat suuruusjärjestyksessä. Ja vielä sekin, että b ja c -luvut tulostuvat suurempina lukuina kuin olen ne syöttänyt, esim. jos olen syöttänyt vaikka 9,6,4, niin tulostuu: 9,8653,10175.
    Missähän voisi olla vika?
    Olisi tosi kiva saada tämä ohjelma toimimaan.
    Vastausta toivoen, C -kielen opiskelija.

    Äänestä

  • keijo kirjoitti:

    Nyt tein hieman paremman ratkaisun.. tosin tämäkin on kaukana vielä täydellisestä ;)

    Ohjelma varaa muistin numeroille dynaamisesti mallocilla, joten kysyttävien numeroiden lukumäärää ei tarvitse hitsata kiinni edeltä käsin (vaikka tässä on niin tehtykin).

    Numerot luetaan merkkijonoina puskuriin josta ne sitten muutetaan atoi -funktiolla numeroiksi. -Tällä vältytään ohjelman kaatumiselta jos käyttäjä syöttää muita kun numeroita.

    Kun numerot on luettu, järjestetään taulukko yksinkertaisella bubblesort menetelmällä ja tulostetaan numerot.

    Tulihan tällekin yllättävä määrä rivejä, mutta en koittanutkaan tehdä erityisen kompaktia ;) Ainakin ohjelmaa on helpompi muuttaa lukemaan vaikka 100 numeroa!

    #include
    #include

    int *kysy_n_lukua(int lkm);
    void vaihda(int *a, int *b);
    void jarjesta(int *taulukko, int koko);

    int main()
    {
       int *taulukko, i, lkm;
       lkm = 10;

       taulukko = kysy_n_lukua(lkm);

       if(!taulukko) {
          printf("Muistin varaaminen epäonnistui!
    ");
          return(1);
       }
       else
       {
          /* jarjesta taulukko */
          jarjesta(taulukko, lkm);

          /* tulostetaan taulukko */
          for(i=0;i

    Kiitos vielä ohjeista, mutta minulle ei ole opetettu vielä tuota taulukon käyttöä, joten en taida vielä hallita sitä. Oisiko mitenkään mahdollista tehdä tämä ohjelma nuilla if-else -lauseilla? En saanut sitä vielä toimimaan oikein, vaikka kokeilin monia vaihtoehtoja siihen ehdottamaasi ohjelmaan.
    Toivottavasti saan siihen vielä ratkaisun.

    Toivoo, Minni

    Äänestä

  • Apua tarvitseva kirjoitti:

    Kiitos neuvoista keijo, ne auttoivat, mutta en saanut vieläkään ohjelmaani toimimaan oikein. Ohjelmani tulostaa vain luvun a, ei lukuja b ja c ja tulostus tulee aina vain samassa järjestyksessä eli a,b,c, eikä se ota huomioon sitä, että ne olisivat suuruusjärjestyksessä. Ja vielä sekin, että b ja c -luvut tulostuvat suurempina lukuina kuin olen ne syöttänyt, esim. jos olen syöttänyt vaikka 9,6,4, niin tulostuu: 9,8653,10175.
    Missähän voisi olla vika?
    Olisi tosi kiva saada tämä ohjelma toimimaan.
    Vastausta toivoen, C -kielen opiskelija.

    Hmm ettei vaan olis printf -lausekkeisiin eksynyt &-merkkiä muuttujien nimien eteen?

    näin:
    printf("a:%d, b:%d, c:%d", a, b, c);

    ei näin:
    printf("a:%d, b:%d, c:%d", a, &b, &c);
    (tämä tulostaisi b ja c muuttujien muistipaikan numeron eikä muuttujan sisältämää lukua)

    Kuitenkin scanf tarvitsee muuttujien nimen eteen tuon merkin, koska se tarvitsee parametreinään muuttujien osoitteet joihon tieto luetaan.

    Toinen mahdollisuus on että kohta, jossa luet näppäimistöltä numerot muuttujiin ei toimi. Lisää tällainen rivi heti sen kohdan jälkeen missä muuttujiin on luettu numerot niin näet onko muuttujat luettu oikein:
    printf("a:%d, b:%d, c:%d", a, b, c);

    Äänestä

  • keijo kirjoitti:

    Hmm ettei vaan olis printf -lausekkeisiin eksynyt &-merkkiä muuttujien nimien eteen?

    näin:
    printf("a:%d, b:%d, c:%d", a, b, c);

    ei näin:
    printf("a:%d, b:%d, c:%d", a, &b, &c);
    (tämä tulostaisi b ja c muuttujien muistipaikan numeron eikä muuttujan sisältämää lukua)

    Kuitenkin scanf tarvitsee muuttujien nimen eteen tuon merkin, koska se tarvitsee parametreinään muuttujien osoitteet joihon tieto luetaan.

    Toinen mahdollisuus on että kohta, jossa luet näppäimistöltä numerot muuttujiin ei toimi. Lisää tällainen rivi heti sen kohdan jälkeen missä muuttujiin on luettu numerot niin näet onko muuttujat luettu oikein:
    printf("a:%d, b:%d, c:%d", a, b, c);

    Olin aivan oikein laittanut ne printf-muodot ja kokeilin tuota riviä,jonka annoit muuttujien perään, mutta ei toiminut, en tiedä sitten, laitoinko sen rivin oikeaan paikkaan?

    Laitan tähän vielä uudestaan tuon ohjelman koodin.
    Olen yrittänyt ratkaista tätä ohjelmaa jo niin kauan, että en enää keksi mitään ratkaisua.
    Alkaa jo tuntua epätoivoiselta....


    #include

    int main()
    {
    int a, b, c;

    printf("Syötä kolme lukua:");
    (scanf("%d %d %d", &a, &b, &c) != 3);
    {
    if( a

    Äänestä

  • Apua tarvitseva Minni kirjoitti:

    Olin aivan oikein laittanut ne printf-muodot ja kokeilin tuota riviä,jonka annoit muuttujien perään, mutta ei toiminut, en tiedä sitten, laitoinko sen rivin oikeaan paikkaan?

    Laitan tähän vielä uudestaan tuon ohjelman koodin.
    Olen yrittänyt ratkaista tätä ohjelmaa jo niin kauan, että en enää keksi mitään ratkaisua.
    Alkaa jo tuntua epätoivoiselta....


    #include

    int main()
    {
    int a, b, c;

    printf("Syötä kolme lukua:");
    (scanf("%d %d %d", &a, &b, &c) != 3);
    {
    if( a

    Toimii tuo ainakin minulla:)

    Näköjään tämä riittää lukujen syöttämiseen, se while härpäke oli liikaa minkä siihen alkuperäiseen esimerkkiin olin pistänyt:
    scanf("%d %d %d", &a, &b, &c);

    Main -funktion lopussa voisi olla "return 0" että kääntäjä pysyy tyytyväisenä(ja onhan main int tyyppiäkin).

    Ohjelma kääntyi ilmankin noita muutoksia, mutta herjoista noilla pääsee eroon.

    Äänestä

  • keijo kirjoitti:

    Toimii tuo ainakin minulla:)

    Näköjään tämä riittää lukujen syöttämiseen, se while härpäke oli liikaa minkä siihen alkuperäiseen esimerkkiin olin pistänyt:
    scanf("%d %d %d", &a, &b, &c);

    Main -funktion lopussa voisi olla "return 0" että kääntäjä pysyy tyytyväisenä(ja onhan main int tyyppiäkin).

    Ohjelma kääntyi ilmankin noita muutoksia, mutta herjoista noilla pääsee eroon.

    Ompa kumma juttu, koska minulla ei toimi tuolla koodilla. Ja jos lisään vielä sen return=0 loppuun, niin silloin minulle tulee virheilmoitus, ilman sitä ohjelma lähtee käyntiin, mutta se vain tulostaa edelleenkin väärin. Voisiko minulla olla jotain vikaa tuossa itse ohjelmassa, minulla on Borland C 4.52.
    Vai voiko olla, niin että tuohon minun ohjelmaan on tullut jokin virhe ja se täytyisi asentaa uudelleen? Se kyllä toimii muilla tekemilläni ohjelmilla. Muuten onko Sinulla erilainen ohjelma kuin minulla?
    Ei kai tässä enää voi mitään tehdä...
    Vai voiko? Olet jo niin paljon aikaa kuluttanut tähän minun ongelmaan, joten kiitos siitä.

    Äänestä

  • Apua tarvitseva Minni kirjoitti:

    Olin aivan oikein laittanut ne printf-muodot ja kokeilin tuota riviä,jonka annoit muuttujien perään, mutta ei toiminut, en tiedä sitten, laitoinko sen rivin oikeaan paikkaan?

    Laitan tähän vielä uudestaan tuon ohjelman koodin.
    Olen yrittänyt ratkaista tätä ohjelmaa jo niin kauan, että en enää keksi mitään ratkaisua.
    Alkaa jo tuntua epätoivoiselta....


    #include

    int main()
    {
    int a, b, c;

    printf("Syötä kolme lukua:");
    (scanf("%d %d %d", &a, &b, &c) != 3);
    {
    if( a

    aaltosulkeet (eli ennen ensimmäistä if:iä, yksi lopusta), muutin
    "(scanf("%d %d %d", &a, &b, &c) != 3);"
    Keijon ehdottamaksi
    "scanf("%d %d %d", &a, &b, &c);":iksi. Lisäksi tungin pari
    merkkiä mukaan, parantamaan tulostuksen ulkonäköä.

    Hienosti kääntyi, ja toimii (Kääntäjänä gcc 3.2.3).

    Alla sorsa:
    #include

    int main()
    {
    int a, b, c;

    printf("Syota kolme lukua:
    ");
    scanf("%d %d %d", &a, &b, &c);

    if ( a

    Äänestä

  • ylimäräiset kirjoitti:

    aaltosulkeet (eli ennen ensimmäistä if:iä, yksi lopusta), muutin
    "(scanf("%d %d %d", &a, &b, &c) != 3);"
    Keijon ehdottamaksi
    "scanf("%d %d %d", &a, &b, &c);":iksi. Lisäksi tungin pari
    merkkiä mukaan, parantamaan tulostuksen ulkonäköä.

    Hienosti kääntyi, ja toimii (Kääntäjänä gcc 3.2.3).

    Alla sorsa:
    #include

    int main()
    {
    int a, b, c;

    printf("Syota kolme lukua:
    ");
    scanf("%d %d %d", &a, &b, &c);

    if ( a

    Yritin tätä Sinun ehdotelmaasi, mutta ei toimi vieläkään. Jos syötän esim. luvut 9,5,3, niin ohjelma tulostaa: 9, 8653, 8959, tätä virhettä se tekee koko ajan. Eli se tulostaa aina ensimmäisenä ensimmäisen syötetyn luvun ja seuraavat tulostuvat paljon suurempina lukuina, kuten esim. huomasit. Olisiko minulla tässä kääntäjässä jokin vika (Borland C 4.52)? Jokin asetus olisi väärin tai jokin osa puuttuu siitä? En kyllä enää keksi muutakaan selitystä.
    Taitaa olla tämä "mahdoton tehtävä"?
    Kiitos avustasi, ei taida enää olla mitään ratkaisua tähän ongelmaan...

    Äänestä

  • Apua tarvitseva Minni kirjoitti:

    Yritin tätä Sinun ehdotelmaasi, mutta ei toimi vieläkään. Jos syötän esim. luvut 9,5,3, niin ohjelma tulostaa: 9, 8653, 8959, tätä virhettä se tekee koko ajan. Eli se tulostaa aina ensimmäisenä ensimmäisen syötetyn luvun ja seuraavat tulostuvat paljon suurempina lukuina, kuten esim. huomasit. Olisiko minulla tässä kääntäjässä jokin vika (Borland C 4.52)? Jokin asetus olisi väärin tai jokin osa puuttuu siitä? En kyllä enää keksi muutakaan selitystä.
    Taitaa olla tämä "mahdoton tehtävä"?
    Kiitos avustasi, ei taida enää olla mitään ratkaisua tähän ongelmaan...

    Minulla on Borland C 5.5 ja tuo toimi mainiosti. Ikävä kyllä en taida osata auttaa tuossa :(

    Äänestä

  • keijo kirjoitti:

    Minulla on Borland C 5.5 ja tuo toimi mainiosti. Ikävä kyllä en taida osata auttaa tuossa :(

    saattaa olla bugi kaantajassasi. Voisit koittaa katsoa borlöandin sivuilta paivityksen

    Äänestä

  • keijo kirjoitti:

    saattaa olla bugi kaantajassasi. Voisit koittaa katsoa borlöandin sivuilta paivityksen

    Poistin ohjelman ja asensin uudelleen, eikä sillä ollut mitään vaikutusta, sitten huomasin, että kun aloin asentamaan ohjelmaa, niin se antoi ensin virheilmoituksen: INSTBI25 caused a general protection fault in module BAMGR16.DLL at 0004:0D70, minkä jälkeen se sitten asensi ohjelman. Eli tässä minun Borlandissa on sovellusvirhe. En vielä tiedä miten sen saan korjattua, ehkä tuo Borland pitäisi päivittää. Muuten mistähän löytäisin tuon päivityssivun, olen yrittänyt hakea, mutta en ole vielä löytänyt.
    Tämä ohjelma, joka mulla on, niin se on koulusta saatu versio, voisikohan sillä olla jotain vaikutusta asiaan, ei ole aivan täydellinen versio. Menen huomenna käymään opiskelupaikassani ja yritän saada sieltä apua.
    Kiitos hirveesti avusta, nyt ainakin tiedän missä se vika on.
    terv. Minni

    Äänestä

  • Apua tarvitseva Minni kirjoitti:

    Poistin ohjelman ja asensin uudelleen, eikä sillä ollut mitään vaikutusta, sitten huomasin, että kun aloin asentamaan ohjelmaa, niin se antoi ensin virheilmoituksen: INSTBI25 caused a general protection fault in module BAMGR16.DLL at 0004:0D70, minkä jälkeen se sitten asensi ohjelman. Eli tässä minun Borlandissa on sovellusvirhe. En vielä tiedä miten sen saan korjattua, ehkä tuo Borland pitäisi päivittää. Muuten mistähän löytäisin tuon päivityssivun, olen yrittänyt hakea, mutta en ole vielä löytänyt.
    Tämä ohjelma, joka mulla on, niin se on koulusta saatu versio, voisikohan sillä olla jotain vaikutusta asiaan, ei ole aivan täydellinen versio. Menen huomenna käymään opiskelupaikassani ja yritän saada sieltä apua.
    Kiitos hirveesti avusta, nyt ainakin tiedän missä se vika on.
    terv. Minni

    Jos scanf lukee ensimmäisen numeron oikein niin mikset käyttäisi 3 scanf kutsua:
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &c);

    Miksiköhän tämä ei tullut aikaisemmin mieleen kuin vasta nyt.. tunnenpas itseni hölmöksi :)

    Äänestä

  • keijo kirjoitti:

    Jos scanf lukee ensimmäisen numeron oikein niin mikset käyttäisi 3 scanf kutsua:
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &c);

    Miksiköhän tämä ei tullut aikaisemmin mieleen kuin vasta nyt.. tunnenpas itseni hölmöksi :)

    Kun kokeilin tuota Sinun ehdottamaasi juttua, niin ohjelma antoi mulle stop-merkin eli se jumittui kokonaan. Luulen, että siinä minun Borlandissa on jokin virhe, ehkä saan selville sen huomenna, kun käyn illalla opiskelemassa.
    Ilmoitan Sinulle, kun saan tietää missä oli vika, sillä onhan tätä ongelmaa jo niin kauan yritetty ratkaista, että kerron Sinulle, kun se on selvitetty.
    Joten nyt lähden katsomaan formuloita ja huomenna taas lähden ratkomaan tätä ongelmaa....
    Heippa taas!

    Äänestä

  • keijo kirjoitti:

    Nyt tein hieman paremman ratkaisun.. tosin tämäkin on kaukana vielä täydellisestä ;)

    Ohjelma varaa muistin numeroille dynaamisesti mallocilla, joten kysyttävien numeroiden lukumäärää ei tarvitse hitsata kiinni edeltä käsin (vaikka tässä on niin tehtykin).

    Numerot luetaan merkkijonoina puskuriin josta ne sitten muutetaan atoi -funktiolla numeroiksi. -Tällä vältytään ohjelman kaatumiselta jos käyttäjä syöttää muita kun numeroita.

    Kun numerot on luettu, järjestetään taulukko yksinkertaisella bubblesort menetelmällä ja tulostetaan numerot.

    Tulihan tällekin yllättävä määrä rivejä, mutta en koittanutkaan tehdä erityisen kompaktia ;) Ainakin ohjelmaa on helpompi muuttaa lukemaan vaikka 100 numeroa!

    #include
    #include

    int *kysy_n_lukua(int lkm);
    void vaihda(int *a, int *b);
    void jarjesta(int *taulukko, int koko);

    int main()
    {
       int *taulukko, i, lkm;
       lkm = 10;

       taulukko = kysy_n_lukua(lkm);

       if(!taulukko) {
          printf("Muistin varaaminen epäonnistui!
    ");
          return(1);
       }
       else
       {
          /* jarjesta taulukko */
          jarjesta(taulukko, lkm);

          /* tulostetaan taulukko */
          for(i=0;i

    atoi taitaa palauttaa nollan, jos se ei saanut luettua numeroa. strtol/strtoul sopivilla parametreilla on toimivampi ratkaisu. qsort on parempi lajitteluun (ks. äsken laittamani esimerkki).

    scanf("%9s", buf);
    taulukko[i] = atoi(buf);

    on kenties selkeämpi:

    if (scanf("%d", taulukko[i]) != 1)
    virhe(...);

    sillä lukeminen em. scanf:llä epäonnistuu, jos ei saatu luettua yhtä numeroa (tyyppiä int).

    Äänestä

  • Apua tarvitseva Minni kirjoitti:

    Ompa kumma juttu, koska minulla ei toimi tuolla koodilla. Ja jos lisään vielä sen return=0 loppuun, niin silloin minulle tulee virheilmoitus, ilman sitä ohjelma lähtee käyntiin, mutta se vain tulostaa edelleenkin väärin. Voisiko minulla olla jotain vikaa tuossa itse ohjelmassa, minulla on Borland C 4.52.
    Vai voiko olla, niin että tuohon minun ohjelmaan on tullut jokin virhe ja se täytyisi asentaa uudelleen? Se kyllä toimii muilla tekemilläni ohjelmilla. Muuten onko Sinulla erilainen ohjelma kuin minulla?
    Ei kai tässä enää voi mitään tehdä...
    Vai voiko? Olet jo niin paljon aikaa kuluttanut tähän minun ongelmaan, joten kiitos siitä.

    Ei return=0, vaan return 0;. Mikään C-kääntäjä ei hyväksy lausetta return=0;.

    Äänestä

  • while toimii, jos sille annetaan heti kolme numeroa peräkkäin.

    Jos whilen scanf saa vastaansa muuta kuin numeroita, ei saada milloinkaan luettua kolmea numeroa, sillä whilessä ei virhetilanteessa lueta ei-numeromerkkejä pois. Sen takia while pamahtaa ja jää ikilooppiin.

    Syötteenluvun ensimmäinen sääntö: "käyttäjä on aina väärässä, tarkista kaikki käyttäjän antama syöte".

    Äänestä

  • keijo kirjoitti:

    Jos scanf lukee ensimmäisen numeron oikein niin mikset käyttäisi 3 scanf kutsua:
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &c);

    Miksiköhän tämä ei tullut aikaisemmin mieleen kuin vasta nyt.. tunnenpas itseni hölmöksi :)

    Nyt ohjelmani toimii. Siinä koodissa oli virhe eli olit oikeassa, kun ehdotit laitettavan jokaisen muuttujan erikseen. Laitan tähän sen koodin pätkän, jolla ohjelma alkoi toimia.

    #include

    void main()
    {
    int a, b, c;

    printf("Syötä ensimmäinen luku
    ");
    scanf("%d", &a);

    printf("Syötä toinen luku
    ");
    scanf("%d",&b);

    printf("Syötä kolmas luku
    ");
    scanf("%d",&c);
    {
    if( a

    Äänestä

  • Apua tarvitseva Minni kirjoitti:

    Nyt ohjelmani toimii. Siinä koodissa oli virhe eli olit oikeassa, kun ehdotit laitettavan jokaisen muuttujan erikseen. Laitan tähän sen koodin pätkän, jolla ohjelma alkoi toimia.

    #include

    void main()
    {
    int a, b, c;

    printf("Syötä ensimmäinen luku
    ");
    scanf("%d", &a);

    printf("Syötä toinen luku
    ");
    scanf("%d",&b);

    printf("Syötä kolmas luku
    ");
    scanf("%d",&c);
    {
    if( a

    Kiva juttu että sait toimimaan

    Äänestä

Traagisen näköinen if-printf systeemi. Miksi alussa luetaan kuusi kertaa luvut samoihin muuttujiin, kun yksikin kerta riittää ? Sitä paitsi viisi ensimmäistä scanf:ää menee hukkaan, koska kuudes scanf ylikirjoittaa ne aiemmin luetut luvut..

int main(..)

tulostus=lukua

Äänestä

Kommentoi aloitusta


Apua tarvitseva kirjoitti:

Teen sellaista ohjelmaa, jossa kysytään 3 lukua ja ne pitäisi tulostaa nousevassa järjestyksessä eli pienimmästä suurimpaan.
Olen yrittänyt saada ohjelmaa toimimaan koko eilisen illan ja tämän päivän, mutta tuloksetta, voisiko joku olla ystävällinen ja auttaa minua tässä.
Laitan tähän koodin, jonka olen tehnyt.Siinä voi kyllä olla paljonkin virheitä, sillä olen vasta äskettäin alkanut opiskelemaan tätä C .

Koodi on tällainen:

#include

void main()
{
int   lukua,lukub,lukuc,tulostus;


   printf("Anna kolme lukua
");
   scanf("%d,%d,%d",&lukua,&lukub,&lukuc);
   scanf("%d,%d,%d",&lukub,&lukua,&lukuc);
   scanf("%d,%d,%d",&lukub,&lukuc,&lukua);
   scanf("%d,%d,%d",&lukua,&lukuc,&lukub);
   scanf("%d,%d,%d",&lukuc,&lukub,&lukua);
   scanf("%d,%d,%d",&lukuc,&lukua,&lukub);



   if (lukua

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