Problem ze zmienną w funkcji

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.

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.

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::sleep_for + chrono literals
punkty += 1 => ++punkty

3

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:

  1. 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/questions/5844429/bstr-t-concatenate-gives-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).

0

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

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