Wątek przeniesiony 2018-04-19 17:15 z C/C++ przez kq.

if, trzy możliwe wyniki

0

Cześć, na wstępie powiem iż dopiero co zaczynam z C++, więc pytanie może być dla was proste, ale ja się nad tym głowię już pare dobrych chwil :P
Program ma poprzez "losowanie" wyłonić zwycięzce. Obie osoby podają liczby w przedziale 1-100, program ma obliczyć która z nich była bliżej, ta wygrywa. Ewentualnie mamy remis. No i problem jest na wstępie. Mimo:

if (l1 > 100 || l1 < 1)
    cout << "Podaj liczbe z zakresu 1-100!";

Program w żaden sposób nie zwraca uwagi na tą funkcje warunkową.
Poniżej wklejam cały kod.
Z góry dziękuje

#include <iostream>
#include <math.h>
#include <cstdlib>
#include <ctime>
using namespace std;

int main(int argc, char** argv) {
	
	string gracz1, gracz2;
	int l1, l2, los, w1, w2;
	
	srand (time(0));
	cout << "Gracz 1 - podaj nick: "; 		cin >> gracz1;
	cout << "Gracz 2 - podaj nick: ";		cin >> gracz2;
	
	los = rand() % 100 + 1;
	
	cout << "Gracz 1 - podaj liczbe z zakresu 1 - 100: ";		cin >> l1;
	if (l1 > 100 || l1 < 1)
		cout << "Podaj liczbe z zakresu 1-100!";
	else
		{
		cout << "Gracz 2 - podaj liczbe z zakresu 1-100: ";		cin >> l2;
	if (l2 > 100 || l2 < 1)
		cout << "Podaj liczbe z zakresu 1-100!";
}
	
	cout << "Wylosowana liczba: " << los;
	
	w1 = abs(los - l1);
	w2 = abs(los - l2);
	
	if (w1 < w2)
	{
			cout << "Wygral gracz pierwszy!";
	}	
	else if (w2 < w1)
	{
	
		cout << "Wygral gracz drugi!";
	}
	
	else if (w1 == w2)
	{
	
		cout << "Remis!"; 
			
	
		} 

	
	return 0;
}
1

Ten if jeszcze się wykona:

if (l1 > 100 || l1 < 1)
	cout << "Podaj liczbe z zakresu 1-100!";

Ale zauważ że jeżeli ten if się wykona to podana przez drugiego gracza liczba nie będzie już sprawdzona (ponieważ znajduje się w else.

Takie rzeczy powinny być robione w while albo do-while, po to aby użytkownik mógł wprowadzić kolejną liczbę jeśli poprzednia była spoza zakresu. Taką pętlę z wczytywaniem liczby od użytkownika najlepiej zrobić w osobnej funkcji.

0

Program zwraca uwagę na podaną funkcję warunkową, wyświetla stosowny komunikat, o, proszę: https://ideone.com/ztG0tj

Pewnie chodzi Ci o to, że następuje wykonanie kodu po tej instrukcji? Jeżeli nie chcesz, musisz if zamienić na pętlę, najlepiej while:

while(l1 > 100 || l1 < 1) {
   // wyświetl prośbę o poprawną liczbę
}
0

Z użyciem while udało się, dzięki!
Jeszcze pozwolę sobie zapytać. Jest jakaś strona na której można znaleźć właśnie zadanka do nauki jakiegoś języka w celu ćwiczenia? Mam nadzieje że da się zrozumieć co właśnie napisałem :P
Dla potomnych zostawiam działający kod z użyciem while, może się przyda jakiemuś googlującemu.

#include <iostream>
#include <math.h>
#include <cstdlib>
#include <ctime>
using namespace std;

int main(int argc, char** argv) {
	
	string gracz1, gracz2;
	int l1, l2, los, w1, w2;
	
	srand (time(0));
	
		cout << "Gracz 1 - podaj swoj nick: ";	cin >> gracz1;
		cout << "Gracz 2 - podaj swoj nick: ";	cin >> gracz2;
	
	los = rand() % 100 + 1;	
	
		cout << gracz1 << " Podaj liczbe z zakresu 1-100: ";		cin >> l1;
while(l1 > 100 || l1 < 1) {
   cout << gracz1 << " Podaj liczbe z zakresu 1-100: "; 	cin >> l1;
}
	cout << gracz2 << " Podaj liczbe: ";			cin >> l2;
	while(l2 > 100 || l2 < 1) 	
	{	
	cout << gracz2 << "Podaj liczbe z zakresu 1-100: ";	cin >> l2;
}
		w1 = abs(los-l1);
		w2 = abs(los-l2);
		
	if (w1 < w2)
	{	
	cout << "Wygral " << gracz1 << endl;
	}
	else if (w2 < w1)
	{	
	cout << "Wygral " << gracz2 << endl;
	}
	else if (w2 == w1)
	{
	cout << "Remis!" << endl;
	}
	
	cout << "Wylosowana liczba to: " << los;
	
	
	return 0;
}

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