Problem ze zmienną typu bool [C++]

0

Napisałem prosty kod.

 
#include <iostream>
#include <string>

using namespace std;

bool jakaplec(string imie);

int main()
{
    string imie, odp;
    bool kontrola;

    cout << "Program okre" << char(-104) << "la p" << char(-120) << "e" << char(-122) << " na podstawie imienia." 
    << endl;
    cout << "Została wykorzystana zmienna typu BOOL." << endl;
    cout << endl;

    do
    {
        cout << "Podaj imi" << char(-87) << ": "; cin >> imie;
        cout << endl;

        if(jakaplec(imie)==true)
        {
            cout << "Dziewczyna." << endl;
            cout << endl;
        }
        else
        {
            cout << "Ch" << char(-120) << "opak." << endl;
            cout << endl;
        }

        cout << "Czy kontynuowa" << char(-122) << " ? (T/N)" << endl;
        cout << endl;

        cout << "Odpowiedz: "; cin >> odp;
        cout << endl;

        if(odp=="T")
        {
            return kontrola=true;
        }
        else
        if(odp=="N")
        {
            system("PAUSE");
            return EXIT_SUCCESS;
        }
        else
        {
            cout << "B" << char(-120) << char(-87) << "dna odpowied" << char(-85) << ". Wybierz T - tak lub N - nie." << endl;
            cout << endl;
        }
    }
    while(kontrola==true);

}

bool jakaplec(string imie)
{
    if(imie[imie.size()-1]=='a')
    {
        return true;
    }
    else
    {
        return false;
    }
}

Problem jest w pytaniu o kontynuację programu. Czy wpiszę T czy N program kończy działanie, a powinien (gdyby był prawidłowy, a coś tu jest nie tak, dlatego pytam) przy T kontynuować. Proszę o wskazówkę.

0

Wykasuj zmienną kontrola i wszystkie jej użycia - jest niepotrzebna.
while(kontrola==true);
zamień na
while(true);

0
        if(odp=="N")
        {
            system("PAUSE");
            return EXIT_SUCCESS;
        }

W tym miejscu zwracasz EXIT_SUCCESS czyli wychodzisz z funkcji main i zakończasz w ten sposób program. Wyrzuć linijkę return EXIT_SUCCESS.

0

mychal.szczygiel

Czyli zmienną bool usunąć z programu, a wtedy

 
        if(odp=="T")
        {
            return kontrola=true;
        }
        else

zamienić na

 
        if(odp=="T")
        {
            return true; //w przypadku wybrania "T" zwraca wartość true
        }
        else

?

Tylko, że wtedy znowu nie działa, jak powinno. Przy wersji jaką przedstawiłem wcześniej wystarczyło "wywalić" błędnie wstawioną tam instrukcję return.

MJay

Dobrze, tylko dlaczego ?

1

Przecież return w mainie zamknie program...

wskazówka

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    char kontrola;

    do
    {
        cout << "Chcesz kontynuowac? T/N" << endl;
        cin >> kontrola;
    }
    while(kontrola == 'T');

    return 0;
}
#include <iostream>

using namespace std;

bool funkcja_bool(int x);

int main()
{
    int a;
    do
    {
        cin >> a;
    }while(funkcja_bool(a));

    return 0;
}

bool funkcja_bool(int x)
{
    if(x>0)
        return true;
    else
        return false;
}

inny przykład

btw. nie trzeba pisać == true w przypadku boolean

Masz tu poprawiony kod, bo zaraz spać lece. Swoją drogą wymazałem te char'y bo tego się czytać nie dało w tych coutach :3

#include <iostream>
#include <conio.h>

using namespace std;

bool jakaplec(string imie);

int main()
{
    string imie, odp;
    bool kontrola;

    cout << "Program okresla plec na podstawie imienia." << endl;
    cout << "Została wykorzystana zmienna typu BOOL." << endl;

    do
    {
        cout << "Podaj imi" << char(-87) << ": "; cin >> imie;
        cout << endl;

        if(jakaplec(imie)==true)
            cout << "Dziewczyna." << endl << endl;
        else
            cout << "Chlopak." << endl << endl;

        cout << "Czy kontynuowac? (T/N)" << endl << endl;

        cout << "Odpowiedz: ";
        cin >> odp;

        if(odp=="N")
            return 0;
        if(odp=="T")
            kontrola=true;

        for(;;) // nieskonczony for, break wychodzi z petli
        {
            if(odp!= "N" && odp!="T")
            {
                cout << endl << "Bledna odpowiedz, wybierz T, lub N" << endl;
                cin >> odp;
            }
            else
                break;
        }

    }
    while(kontrola==true);

}

bool jakaplec(string imie)
{
    if(imie[imie.size()-1]=='a')
    {
        return true;
    }
    else
    {
        return false;
    }
}
0

Czemu piszecie tak:

 while(kontrola==true)

wystarczy tak i jest bardziej estetycznie

while(kontrola)
1

a ja nie wiem czemu piszecie tak:

bool funkcja_bool(int x)
{
    if(x>0)
        return true;
    else
        return false;
}

lepiej chyba tak:

bool funkcja_bool(int x)
{
    return x>0;
}

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