too many arguments to function `random'

Mikähän tässä nyt mättää:

if(random(tappotahti)==0)

jne.

Kääntäjä valittaa:
pah.c: In function `pah_puh':
pah.c:179: too many arguments to function `random'
8867
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

random-funktio on määritelty:
long int random(void);

Annat siis randomille liikaa argumentteja (kuten virheilmoitus selkeästi kertoo). Oikea tapa kutsua on random(), sillä random ei ota yhtään argumenttia.
Mainittakoon vielä, että randomin palauttama arvo on aika harvoin nolla.

Äänestä
  • Tuo if(random(tappotahti)==0) on ohjelmassa, joka on listattu kirjassa "Pelien parhaat" (1994). Kirjan mukaan koodi on C-kieltä. Kaikki muut rivit toimivatkin, mutta eivät tuo ja eräs vastaava rivi.

    Mikäs tässä on pielessä, onko kirjassa aivan väärää koodia, vai onko kirjan tekijä käyttänyt kääntäjää, joka hyväksyy tuon?

    Äänestä

  • juusto kirjoitti:

    Tuo if(random(tappotahti)==0) on ohjelmassa, joka on listattu kirjassa "Pelien parhaat" (1994). Kirjan mukaan koodi on C-kieltä. Kaikki muut rivit toimivatkin, mutta eivät tuo ja eräs vastaava rivi.

    Mikäs tässä on pielessä, onko kirjassa aivan väärää koodia, vai onko kirjan tekijä käyttänyt kääntäjää, joka hyväksyy tuon?

    Ilmeisesti kirjan kirjoittaja ei käytä samaa standardikirjastoa, jota oletin sinun käyttävän. Siinä tapauksessa sinun pitää katsoa kyseisen funktion määrittelystä miten ja millä arvoilla sitä randomia pitää kutsua. Koodi on kyllä oikeaa C:tä.

    Jos kääntäjä hyväksyy funktion kutsumisen väärällä tavalla (eli sitä voi kutsua eri määrällä argumentteja kuin määrittelyssä kerrotaan), niin se on mitä ilmeisimmin rikki.

    Yksi mahdollisuus on vielä se, että olet kirjoittanut alkuun #include , jossa on määritelty random, joten kääntäjä olettaa sinun tarkoittavan sitä eikä kirjan vastaavaa. Tuo vaikuttaisi oikeastaan aika todennäköiseltäkin, koska standardikirjaston random ei ota argumentteja ja kirjan vastaava random ottaa argumentin sekä valitus koski juuri funktion käyttämistä väärällä määrällä argumentteja.

    Äänestä

  • Mik kirjoitti:

    Ilmeisesti kirjan kirjoittaja ei käytä samaa standardikirjastoa, jota oletin sinun käyttävän. Siinä tapauksessa sinun pitää katsoa kyseisen funktion määrittelystä miten ja millä arvoilla sitä randomia pitää kutsua. Koodi on kyllä oikeaa C:tä.

    Jos kääntäjä hyväksyy funktion kutsumisen väärällä tavalla (eli sitä voi kutsua eri määrällä argumentteja kuin määrittelyssä kerrotaan), niin se on mitä ilmeisimmin rikki.

    Yksi mahdollisuus on vielä se, että olet kirjoittanut alkuun #include , jossa on määritelty random, joten kääntäjä olettaa sinun tarkoittavan sitä eikä kirjan vastaavaa. Tuo vaikuttaisi oikeastaan aika todennäköiseltäkin, koska standardikirjaston random ei ota argumentteja ja kirjan vastaava random ottaa argumentin sekä valitus koski juuri funktion käyttämistä väärällä määrällä argumentteja.

    Alussa tosiaan on #include
    mutta niin on kirjassakin. Kaikki kirjan käyttämät includet:

    #include
    #include
    #include
    #include
    #include

    Onko kirjailija muka käyttänyt erisisältöistä stdlib.h-kirjastoa kuin minulla? Ja miten kirjailija voisi olettaa, että lukijalla on sama ja lukijalla ohjelmalla toimii?

    Äänestä

  • juusto kirjoitti:

    Alussa tosiaan on #include
    mutta niin on kirjassakin. Kaikki kirjan käyttämät includet:

    #include
    #include
    #include
    #include
    #include

    Onko kirjailija muka käyttänyt erisisältöistä stdlib.h-kirjastoa kuin minulla? Ja miten kirjailija voisi olettaa, että lukijalla on sama ja lukijalla ohjelmalla toimii?

    Voisi olettaa kirjailijan käyttävän samantyyppisiä includeja kuin sinullakin on, sillä tuo include on käytännössä enemmän tai vähemmän standardi. Senkin takia voisi jo olettaa annetun ohjelmanpätkän toimivan kaikilla samalla tavalla.

    Toimiiko edes yksinkertainen ohjelma, joka käyttää stdlibin ramdomia:

    #include
    #include

    int main(void) {
    if (random() == 0)
    printf("puppaa..");
    return 0;
    }

    Äänestä

  • Mik kirjoitti:

    Voisi olettaa kirjailijan käyttävän samantyyppisiä includeja kuin sinullakin on, sillä tuo include on käytännössä enemmän tai vähemmän standardi. Senkin takia voisi jo olettaa annetun ohjelmanpätkän toimivan kaikilla samalla tavalla.

    Toimiiko edes yksinkertainen ohjelma, joka käyttää stdlibin ramdomia:

    #include
    #include

    int main(void) {
    if (random() == 0)
    printf("puppaa..");
    return 0;
    }

    Kyllä tuo toimii, tulostaa tyhjän rivin.
    Mutta mitäs tuo nyt liittyy aiheeseen?

    Miksei if(random(tappotahti)==0) toimi ja miksi se kirjan tekijällä toimii?

    Äänestä

  • juusto kirjoitti:

    Kyllä tuo toimii, tulostaa tyhjän rivin.
    Mutta mitäs tuo nyt liittyy aiheeseen?

    Miksei if(random(tappotahti)==0) toimi ja miksi se kirjan tekijällä toimii?

    Yritän vain poistaa mahdollisia vian aiheuttajia testaamalla jotain toimivaksi oletettua koodia tuolla tapaa. Jotta olisi helpompaa tutkia tätä ongelmaa, niin pitäisi käytössä olla sama kääntäjä ja koko lähdekoodi. Muuten menee arvailuksi, sillä kaiken järjen ja annettujen lisätietojen mukaan randomin pitäisi toimia ilman yhtään parametria (siis random()). Tosin eipä olisi ensimmäinen kerta, kun jonkun kirjan kirjoittaja on joko opastanut väärin tai sitten hän on käyttänyt jotain kummaa tapaa joka vain toimii hänellä sattumalta.

    Äänestä

if((random()%tappotahti)==0)

taikka sitten tappotahti muuttujan tilalle numeroina se mikä on "yläraja randomille".
En vanno tuon toimivuuteen, mutta jotain tuollaista muistelisin.

Äänestä

Kommentoi aloitusta


juusto kirjoitti:

Mikähän tässä nyt mättää:

if(random(tappotahti)==0)

jne.

Kääntäjä valittaa:
pah.c: In function `pah_puh':
pah.c:179: too many arguments to function `random'

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