Problem ze zmienną w funkcji

Odpowiedz Nowy wątek
2019-10-08 19:34
0

Witam, przejdę od razu do rzeczy napisałem prostą funkcje do losowania liczb, z pewnymi zasadami oto ona:

void zgadnijliczbe()
{
    int losowaliczba, insert = 0;
    int punkty = 0;
    //int decyzja=1;

    do {
        srand(time(NULL));
        losowaliczba = rand() % 100 + 1;
        cout << losowaliczba << endl;

            for (int i = 0; i < 5; i++) {
                cout << "Pamietaj, ze masz tylko 5 prob dla kazdej liczby" << endl;
                cout << "Podaj liczbe: ";
                cin >> insert;
                Sleep(500);
                system("cls");
                if (losowaliczba == insert) {
                    cout << "Gratulacje zgadles, zyskujesz jeden punkt!" << endl;
                    punkty += 1;
                    Sleep(100);
                    system("cls");
                    break;
                }
                else if (insert != losowaliczba)
                {
                    cout << "Nie udalo Ci sie zgadnac liczby jest to twoja " << i + 1 << " proba." << endl;
                    if (insert > losowaliczba) cout << "(Wprowadzona liczba jest wieksza niz, ta ktora musisz odgadnac.)" << endl;
                    else if (insert < losowaliczba) cout << "(Wprowadzona liczba jest mniejsza niz, ta ktora musisz odgadnac.)" << endl;
                    Sleep(100);
                    system("cls");
                }

            }

    } while (insert == losowaliczba); 

    cout << "Twoja koncowa ilosc punktow wynosi: " << '/n' << punkty << endl;

Problem jest następujący, że podczas wypisywania punktów( na samym końcu kodu) daje mi liczbe dokładnie "121421" i zbytnio nie wiem o co biega no bo przecież zmienna jest zadeklarowana i zainicjalizowana, gdzie leży problem? Prosze o jasne wyjaśnienie, pozdrawiam.

edytowany 1x, ostatnio: cerrato, 2019-10-08 20:12

Pozostało 580 znaków

2019-10-08 20:14
4

Postarałem się uruchomić ten program online, tak mi wyszło: https://ideone.com/MgOTEC

Moja sugestia brzmi, że problem z wyświetlaniem punktów leży w użyciu '/n' tuż przed nimi przed ich wyświetlaniem. Spróbuj jakoś inaczej zapisać to, co chcesz osiągnąć za pomocą przekazania tego literału na wyjście.


UPDATE: Zmieniłem ten program z linku na odpowiadający lepiej Twojemu (zmieniłem swoje " na Twoje ').


UPDATE: Oczywiście nie używasz '\n', tylko '/n'. Nie zauważyłem, wybacz. W każdym razie rzecz leży w nim, jak doprecyzował @tajny_agent poniżej.


edytowany 4x, ostatnio: Silv, 2019-10-08 20:28

Pozostało 580 znaków

2019-10-08 20:20
4
cout << "Twoja koncowa ilosc punktow wynosi: " << '/n' << punkty << endl;

Zamień /n na \n, a najlepiej na "Twoja koncowa ilosc punktow wynosi:\n"

PS.
Nadużywasz endl
Nie używaj rand(), C++ ma <random>
Zamiast Sleep => std::this_thread::sleep_for + chrono literals
punkty += 1 => ++punkty


Wole wizerunek z nożem w zębach, przejść po trupie
Niż zgrywać ćwierćinteligenta z piórkiem w d.
edytowany 1x, ostatnio: tajny_agent, 2019-10-08 20:20
Pokaż pozostałe 5 komentarzy
Tak sobie myślę, że aż dziwne – tak, jak często używam / oraz \ w pisaniu skryptów na Linuksie, tak nie pamiętam zbyt wielu pomyłek w tym zakresie... gdzie trzeba, piszę odpowiednie znaki... a tutaj jednak moja pomyłka. - Silv 2019-10-08 21:06
Jak to mówią - najlepszym się zdarza ;) - tajny_agent 2019-10-08 23:51
<random> obsysa. - Azarien 2019-10-09 09:52
Podrzucisz coś konkretnego? Chętnie poczytam :) - tajny_agent 2019-10-09 13:30
<random> jest brzydki i niemożliwy do zapamiętania. z jednej strony masz srand() i rand(), a z drugiej strony jakieś uniform_int_distribution, std::mt1500100900 wtf. - Azarien 2019-10-09 13:55

Pozostało 580 znaków

2019-10-08 20:41

Jeśli autor wątku chciałby wiedzieć, czemu akurat liczba 12142 pojawia się na wyjściu po wykonaniu cout << '/n':

Na podstawie https://stackoverflow.com/a/5844460 stwierdzam, że '/n' to tzw. multicharacter literal. Takie znaki literały są opisane w specyfikacji C++ tutaj: https://en.cppreference.com/w/cpp/language/character_literal – cytat:

6) Multicharacter literal, e.g. 'AB', has type int and implementation-defined value.

co oznacza, że typ wyrażenia '/n' jest int (co brzmi prawidłowo, patrząc na wyjście, bo 12142 wygląda na int). Zaś dlaczego akurat taka liczba? Jest to zależne od implementacji. W jaki sposób? Szczegóły podane są w sekcji "Notes" powyższego linku. Cytat:

Multicharacter literals were inherited by C from the B programming language. Although not specified by the C or C++ standard, most compilers (MSVC is a notable exception) implement multicharacter literals as specified in B: the values of each char in the literal initialize successive bytes of the resulting integer, in big-endian zero-padded right-adjusted order, e.g. the value of '\1' is 0x00000001 and the value of '\1\2\3\4' is 0x01020304.

Rozsądną interpretację dla tego przypadku daje komentarz schnaadera tutaj: https://stackoverflow.com/que[...]-12142#comment6712436_5844460 – cytat:

For the curious: 12142 = 0x2F6E hex, 0x2F = '/', 0x6E = 'n'


PS. W kwestii źródeł dot. tego wyjaśnienia, dlaczego reprezentacja numeryczna znaków / oraz n jest taka, jak powyżej:


PS2. Oczywiście schnaader mógłby się mylić – a ja nie mogę go sprawdzić, bo nie znam się na C++ – dlatego napisałem, że Jego "interpretacja" jest "rozsądna" (dla mnie).


edytowany 13x, ostatnio: Silv, 2019-10-08 20:57

Pozostało 580 znaków

2019-10-08 21:29
0

Teraz wszystko działa, dziękuje bardzo za tak dobre wytłumaczenie.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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