Co robi funkcja srand (time (0)) w C ++?


Najlepsza odpowiedź

Zacznijmy od początku, ponieważ wiesz, że komputer generuje pseudolosowe liczby nie są naprawdę losowe, ponieważ są oparte na jakiejś formule zaprojektowanej przez programistów. Na podstawie tego wzoru komputer generuje zestaw liczb losowych, zgodnie z naszymi oczekiwaniami. Jednym ze sposobów myślenia o tym jest powiedzmy, że komputer zaczyna czytać książkę, w której na każdej stronie znajdują się liczby. Czytając tę ​​książkę, może się wydawać, że komputer tworzy sekwencję losowych liczb.

Ale jest problem: komputer zaczyna czytać książkę od początku. Z tego powodu komputer zawsze będzie tworzył ten sam zestaw „losowych” liczb w programie. Załóżmy, że jeśli gdzieś używasz tego programu, powiedz, że gra w kości będzie zawsze dawała takie same wyniki, a tego nie chcesz.

Rozwiązaniem tego problemu byłoby, gdyby komputer zaczął czytać z dowolnego miejsca w książce, a nie od początku. Nazywa się to „ seeding ”. Przekazując argument czas do funkcji srand , generuje ona w zasadzie liczbę losową w oparciu o bieżącą datę i godzinę, z powodu których otrzymujesz inny losowy za każdym razem, gdy uruchamiasz program, i nie jest to wiarygodne, ale działa przez większość czasu.

Jeśli użyjesz tego kodu, umieścił plik na górze < cstdlib jeśli nie jest w porządku. Ten plik zawiera definicję funkcji generowania liczby losowej.

Odpowiedź

W C ++, co się stanie, jeśli napiszę „return 1 „w funkcji głównej?

Jeśli instrukcja return 1; zostanie faktycznie wykonana, spowoduje to zakończenie działania programu, zwracając stan 1 do środowiska wywołującego. (Może zwrócić wartość 1 do funkcji wywołującej, ale C ++ nie pozwala na wywołanie main).

To, co to oznacza, zależy od środowiska. Język nie nadaje żadnego znaczenia zwracanej wartości 1. Wymaga zwrotu 0; aby zwrócić status wskazujący na sukces. Nagłówek , który deklaruje funkcję exit(), również definiuje makra EXIT\_SUCCESS i EXIT\_FAILURE, które mają oczywistą semantykę, jeśli ich wartości są zwracane z main. (Zwracanie wartości z main jest zasadniczo równoważne wywołaniu exit() z tą samą wartością).

W wielu systemach , w tym Linux, inne systemy podobne do UNIX i Windows, zwracanie 0 oznacza sukces, a zwracanie 1 oznacza awarię, ale inne systemy mają inne konwencje. (W szczególności OpenVMS używa wartości parzystych do oznaczenia niepowodzenia i wartości nieparzystych do oznaczenia sukcesu, więc return 1; oznaczałoby sukces; środowisko wykonawcze C ma specjalny kod, dzięki któremu return 0; zwraca dziwny, tj. pomyślny, status.)

Jeśli piszesz kod, który ma działać tylko w systemach Linux / UNIX / POSIX, return 1; może służyć do wskazania, że ​​program się nie powiódł – ale return EXIT\_FAILURE; jest bardziej przenośny.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *