Absurdalny wynik dodawania.

0

Skrót tego o co mi chodzi
liczba losowa + liczba losowa = absurdalny wynik (niektóre ujemne)
Szukałem w czym może być problem, ale nie wiem. Domyślam się jedynie, że podczas generowania liczby losowej jakiś błąd się wkrada, jednak wynik losowej liczby wyświetlany jest prawidłowo

#include "stdafx.h"
#include "iostream"
#include "string"
#include "cstdlib"
#include "time.h"

using namespace std;

int los(int nLos1, int nLos2)
{
	srand((unsigned int)time(NULL));
	nLos1 = rand() % 10 + 1;
	nLos2 = rand() % 10 + 1;
	cout << "Ile to jest " << nLos1 << " + " << nLos2 << " = ";
	return (nLos1, nLos2);
}

int _tmain(int argc, _TCHAR* argv[], int nLos1, int nLos2)
{
	int iWyn, iWyn2;
	los(nLos1, nLos2);
	cout << nLos1 + nLos2;
	cin >> iWyn;
	if (iWyn == nLos1 + nLos2)
	{
		cout << "Dobrze!" << endl;
	}
	else
		cout << "zle " << endl;
	system("pause");
}
cout << nLos1 + nLos2;

ta linijka wyświetla błędny wynik, jest wstawiony tylko do sprawdzenia wyniku.

dodanie znacznika <code class="cpp"> - @furious programming

0

Przekazujesz do funkcji zmienne przez wartość i oczekujesz, że magicznie te wartości się pojawią w main?
Nie wiem jakim cudem chcesz też zwrócić przez return 2 wartości...

Wróć do pierwszej strony kursu podstawowego.

2
int _tmain(int argc, _TCHAR* argv[], int nLos1, int nLos2)

Co to jest? Te argumenty po argv nie mają żadnego sensu.

los(nLos1, nLos2);

To wywołanie nie zmienia wartości zmiennych przekazanych w parametrach!

cout << nLos1 + nLos2;

Zmienne mają nieokreślone wartości, wynik dodawania jest bez sensu.

Co do funkcji, co to robi wg. Ciebie?

return (nLos1, nLos2);

Jak to naprawić: wywal dziwne argumenty z main. Dodaj dwie zmienne, do których przekażesz wynik losowania - funkcja musi przyjąć je przez referencję i niczego nie zwracać.

Ponadto: iWyn2 nie jest używane. Wywal koszmarne system("pause"), to bardzo zła praktyka. Funkcja los nie powinna niczego wypisywać - to powinno być innym miejscu. Funkcja powinna robić jedną rzecz.

1
return (nLos1, nLos2);

To zwraca nLos2, bo przecinek to operator, który zwraca wartość po prawej.
2.

srand((unsigned int)time(NULL));

To się robi raz, więcej przeważnie nie potrzeba.
3.

int _tmain(int argc, _TCHAR* argv[], int nLos1, int nLos2)

Tak się nie powinno deklarować zmiennych lokalnych
standardowo powinno być main, nie _tmain
http://stackoverflow.com/questions/895827/what-is-the-difference-between-tmain-and-main-in-c
4.

    los(nLos1, nLos2);
    cout << nLos1 + nLos2;

Wywołanie funkcji los nie zmienia wartości zmiennych nLos1 i nLos2. Dlatego dostajesz nieoczekiwane wyniki.
5.

system("pause");

Po co? Jak po to, żeby zatrzymać konsolę to tego się nie powinno tak robić. W ogóle nie powinno się tego robić w takich programach. Jeśli konsola ma zostać to pogrzeb w ustawieniach IDE.

dodanie znaczników <code class="cpp"> - @furious programming

0

ok, wracam douczyć się.
Ale nie wiem jak zrobić, żeby program się nie wyłączał na koniec, nie wiem gdzie to jest w ustawieniach. Return ani getch nie działa.

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