Problem z if/else if.

0

Siedziałem i szukałem rozwiązania i nic nie dało efektu. Nie ważne czy wpiszę "TAK" Lub "NIE" zawsze wykonuje się if z zakresu "Tak", a else if "Nie" jest pomijany.
Drugi problem to fakt, że podczas resetu gry kiedy wpiszę jakąkolwiek cyfrę program się resetuje. W jaki sposób mogę w tym fragmencie kodu zablokować liczby?
Jestem świadomy, że to "śmieszne" problemy, ale uczę się trzeci dzień.

 #include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
#include <string>

using namespace std;

int liczba, losowanie;
int licznik = 1;
string wybor1;

void zlaLiczba()
{
    if (liczba > 20)
    {
        cout << "Wybrana Liczba Wykracza Po Za Zakres Liczb!" << endl;
    }
}

int main() 
{
    do
    {
        do
        {
            srand(time(NULL));
            cout << "Gra w Liczby! Zakres Liczb Od 1 Do 10" << endl;
            cout << "Prosze Podac Wybrana Liczbe : ";
            cin >> liczba;
            zlaLiczba();
            losowanie = ((rand() % 3) + 1);
            if (liczba == losowanie)
            {
                cout << "========================================" << endl;
                cout << "Gratuluje! Twoja Liczba Jest Poprawna!" << endl;
                cout << "Szczesliwa Liczbe Trafiles Za " << licznik << " Razem!" << endl;
                cout << "Byla To Liczba Numer : " << losowanie << endl;
                cout << "========================================" << endl << endl;
            }
            else if (liczba != losowanie)
            {
                cout << "Sprobuj Szczescia Podnownie! " << endl;
                Sleep(1000);
                system("cls");
                licznik++;
            }
        } while (liczba != losowanie);

        cout << "Czy Chcesz Zresetowac Gre? Wybierz [Tak] lub [Nie]" << endl;
        cout << "Wybor : ";
        cin >> wybor1;

        if (wybor1 == "Tak" || "TAK" || "tak")
        {
            cout << "Restartuje Gre!" << endl;
            Sleep(1000);
            system("cls");
        }
        else if (wybor1 == "Nie" || "NIE" || "nie")
        {
            exit(0);
        }
    } while (wybor1 == "Tak" || "TAK" || "tak");
    system("pause");
    return 0;
}
3
if(wybor1 == "Tak" || "TAK" || "tak")

Nie możesz tak - musisz trzy razy porównać zmienną do literału:

if(wybor1 == "Tak" || wybor1 == "TAK" || wybor1 == "tak")

A tak na marginesie - użyj jakiejś funkcji, która zmieni wielkość znaków w ciągu np. na małe litery i dopiero wtedy porównuj; Dzięki temu wystarczy przyrównanie tylko do jednego literału.

1

Wydaje mi się, że (wybor1 == "Tak" || "TAK" || "tak") to to samo co (wybor1 == "Tak" || true || true)

0

Poza tym, co napisał furious, to nie robi się tak. A jeśli użytkownik wpisze: "TaK", to co się stanie? Program się wyłączy. To, co wpisze użytkownik powinieneś zamienić np. na małe litery i potem masz już tylko porównanie:

 if(wybor1 == "tak")
{

}

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