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, botów: 0