Losowość, Od zera do gier kodera

0
// While - druga pętla warunkowa
#include <iostream>
#include <ctime>
#include <conio.h>
void main()
{
// wylosowanie liczby
srand ((int) time(NULL));
int nWylosowana = rand() % 100 + 1;
std::cout << "Wylosowano liczbe z przedzialu 1-100." << std::endl;
// pierwsza próba odgadnięcia liczby
int nWprowadzona;
std::cout << "Sprobuj ja odgadnac: ";
std::cin >> nWprowadzona;
// kolejne próby, aż do skutku - przy użyciu pętli while
while (nWprowadzona != nWylosowana)
{
if (nWprowadzona < nWylosowana)
std::cout << "Liczba jest zbyt mala.";
else
std::cout << "Za duza liczba.";
std::cout << " Sprobuj jeszcze raz: ";
std::cin >> nWprowadzona;
}
std::cout << "Celny strzal :) Brawo!" << std::endl;
getch();
}

Pierwszy błąd wykrywa już w 5 linijce, jest napisane tylko - In function 'int main()':
Udało mi się to obejść zamieniając void na int w 5-tej linijce kodu (nie mam pojęcia o co może chodzić - podobno void i int są zamienne).
Po zamianie void na int kompilacja zatrzymuje się na ósmej linijce kodu

srand ((int) time(NULL));

8 24 C:\Users\as\Documents\C++\BezNazwy1.cpp [Error] 'srand' was not declared in this scope - tak twierdzi kompilator.

Nie zdziwiło by mnie to gdybym pisał ten program sam, najdziwniejsze jest właśnie to, że kod ten jest skopiowany kropka w kropkę z tutorialu "Od zera do gier kodera" i nie mam pojęcia co z tym fantem zrobić.

Dodatkowo załączam error z linijki 9-tej, może będzie przydatny

  • 9 24 C:\Users\as\Documents\C++\BezNazwy1.cpp [Error] 'rand' was not declared in this scope **
    Proszę o pomoc i z góry dziękuję.
2
  1. Coś oszukujesz. Jeżeli miałeś void main() to kompilator nie zwrócił by błędu In function 'int main()':
  2. main musi zwracać int (dlatego program nie działał jak miałeś void main())
  3. srand należy do biblioteki cstdlib - musisz ją includować.

podobno void i int są zamienne

Nie wiem gdzie to wyczytałeś, ale źle to zrozumiałeś.

0

Ad.1. Patrz do załącznika, jeżeli faktycznie coś przeinaczyłem to raczej ze względu na moje nie rozgarnięcie ale wydaje mi się że nic nie pomyliłem
Ad.2. Mógłbyś to jakoś jaśniej napisać, bo dalej nie rozumiem (chodzi o to że main ma zwracać typ wartości int, tak?)
Ad.3. Faktycznie teraz wszystko śmiga, wielkie dzięki!

Nie wiem gdzie to wyczytałeś, ale źle to zrozumiałeś.

W tym samym tutorialu, z którego skopiowałem ten kod - musiało mi się coś pomieszać.

Na swoją obronę dodam tylko, że w tutorialu nie było wzmianki o tym aby includować bibliotekę z punktu trzeciego.

0
  1. A czemu nie przeczytałeś treści pierwszego błędu w którym masz jasno napisane o co chodzi ;)?
  2. Tak (masz to napisane we wspomnianym wcześniej błędzie).

Jeszcze jedno, specem od C++ nie jestem ale nie bardzo widzę sens tego rzutowania na int w

srand ((int) time(NULL));

wystarczy

srand(time(NULL));

www.cpp0x.pl/dokumentacja/standard-C/srand/587

0

Tak to wlasnie jest jak sie uczysz z dziesiecioletniego kursu(jak nie starszego) void main by przeszlo przed standaryzacja c++ ale nie teraz.

0
hipekk napisał(a):
  1. A czemu nie przeczytałeś treści pierwszego błędu w którym masz jasno napisane o co chodzi ;)?

Przeczytałem, ale nie rozumiałem jeszcze wtedy :)

Jeszcze jedno, specem od C++ nie jestem ale nie bardzo widzę sens tego rzutowania na int w
srand ((int) time(NULL));

wystarczy
srand(time(NULL));

Od tej pory będę się stosować.
Dzięki za link i za poświęcony czas.

Reinicke napisał(a):

Tak to wlasnie jest jak sie uczysz z dziesiecioletniego kursu(jak nie starszego) void main by przeszlo przed standaryzacja c++ ale nie teraz.

To już tyle lat ma? Nie miałem pojęcia, znasz może jakieś nowsze i dobre kursy c++?

0

Kursy jak kursy ale polecam symfonie Grebosza, tylko 2 tomowa wersje standard. Ksiazka, ktorej nie da sie nie zrozumiec.

4
Reinicke napisał(a):

Kursy jak kursy ale polecam symfonie Grebosza, tylko 2 tomowa wersje standard.
Mówisz, że nie należy się uczyć z prehistorycznego kursu (słusznie), a potem polecasz przedpotopową książkę.

@issuel jak już masz się uczyć, to ucz się np. ze "Szkoły programowania" Praty (najnowsze wydanie z C++11). Ja ją tylko pobieżnie przeglądałem, ale sporo doświadczonych osób z forum ją chwali.
Generalnie ucz się najnowszego C++ (C++11/C++14), w którym używanie rand/srand jest już niezalecane.

0

Najnowsze wydanie symfonii nie jest bardzo stare, najwazniejsze ze jest po standaryzacji. Na start ta ksiazka jest najlepsza moim zdaniem, wyjasnia podstawy w bardzo przystepny sposob, reszty mozna sie douczyc z internetu.

0

Witam.

Czy "najnowsze" Wydanie Symfoni c++ również jest już podobnie nieaktualne jak przypadek powyżej ??
Warto ją jeszcze ruszać ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1