Mitä funktio srand (aika (0)) tekee C ++: ssa?


Paras vastaus

Aloitetaan vain alusta, koska tiedät, että tietokone tuottaa näennäissatunnais numerot eivät ole todella satunnaisia, koska ne perustuvat johonkin ohjelmoijien suunnittelemaan kaavaan. Ja tämän kaavan perusteella tietokone luo joukon satunnaislukuja, kuten odotamme. Yksi tapa ajatella tätä on, että tietokone alkaa lukea kirjasta, jonka jokaisella sivulla on numeroita. Lukemalla tästä kirjasta tietokone voi näyttää siltä, ​​että se tuottaa satunnaislukuja.

On kuitenkin ongelma: Tietokone alkaa lukea kirjasta alusta alkaen. Tämän vuoksi tietokone tuottaa aina saman ”satunnaislukujen” joukon ohjelmassa. Oletetaan, että jos käytät tätä ohjelmaa jossakin paikassa, sano noppapeli, se tuottaa aina samat tulokset etkä halua sitä.

Ratkaisu tähän ongelmaan olisi, jos tietokone alkaa lukea mielivaltaisesta paikasta kirjassa eikä alusta alkaen. Tätä kutsutaan nimellä ” kylvö ”. Kun aika-argumentti siirretään funktioon srand , se tuottaa periaatteessa satunnaisluvun nykyisen päivämäärän ja kellonajan perusteella, minkä vuoksi saat erilaisia ​​satunnaisia ​​aina ohjelman käynnistämisen yhteydessä, mikä ei kuitenkaan ole luotettavaa, mutta toimii suurimman osan ajasta.

Jos käyttäisit tätä koodia, sinulla olisi sisällytti tiedoston alkuun < cstdlib ellei se ole kunnossa. Tämä tiedosto sisältää funktion määritelmän satunnaisluvun luomisesta.

Vastaus

Mitä C ++: ssa tapahtuu, jos kirjoitan ”return” 1 ”päätoiminnossa?

Jos return 1; -lauseke todella suoritetaan, se aiheuttaa ohjelman lopettamisen palauttamalla tilan 1 kutsuvaan ympäristöön. (Se voi palauttaa arvon 1 kutsuvalle funktiolle, mutta C ++ ei salli main -numeron soittamista.)

Tämän merkitys riippuu ympäristöstä. Kielellä ei ole merkitystä palautusarvolle 1. Se vaatii palautuksen 0; palauttaa tila, joka osoittaa onnistumisen. Otsikko , joka ilmoittaa funktion exit(), määrittää myös makrot EXIT\_SUCCESS ja EXIT\_FAILURE, joilla on ilmeinen semantiikka, jos niiden arvot palautetaan pääkohdasta. (Arvon palauttaminen kohdasta main vastaa olennaisesti saman arvon kutsumista exit().)

Monissa järjestelmissä , mukaan lukien Linux, muut UNIX-tyyppiset järjestelmät ja Windows, palautus 0 tarkoittaa menestystä ja palauttaminen 1 tarkoittaa epäonnistumista – mutta muilla järjestelmillä on erilaiset käytännöt. (Erityisesti OpenVMS käyttää parillisia arvoja epäonnistumiseen ja parittomia arvoja onnistumiseen, joten return 1; osoittaisi menestystä; C-ajonaikaisella on erityiskoodi, joka tekee return 0; palauta pariton eli onnistuneen tilan.)

Jos kirjoitat koodia, joka on tarkoitettu toimimaan vain Linux / UNIX / POSIX -järjestelmissä, return 1;: ää voidaan käyttää osoittamaan, että ohjelma epäonnistui – mutta return EXIT\_FAILURE; on kannettavampi.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *