Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Początkujący potrzebuje pomocy ze zmienną bool.

Ostatnio zmodyfikowano 2017-04-13 18:44
Autor Wiadomość
Kejsar
Temat założony przez niniejszego użytkownika
Początkujący potrzebuje pomocy ze zmienną bool.
» 2017-04-13 15:24:48
Witam.
Jestem w trakcie pisania własnego kalkulatora.
Natknąłem się na pewny problem, który już rozwiązałem, ale nie do końca rozumiem czemu przed rozwiązaniem tego program nie działał tak jak chcę.

Tak wygląda kod programu przed rozwiązaniem problemu:
C/C++
#include <iostream>

using namespace std;

float x;
float y;
char znak;
bool wyjscie = znak == 'x';

int main()
{
    cout << "Liczba: "; cin >> x;
    cout << "Znak: "; cin >> znak;
    cout << "Liczba: "; cin >> y;
    switch( znak )
    {
    case '*':
        cout << "Wynik: " <<( x * y ) << endl;
        break;
       
    case '/':
        cout << "Wynik: " <<( x / y ) << endl;
        break;
       
    case '+':
        cout << "Wynik: " <<( x + y ) << endl;
        break;
       
    case '-':
        cout << "Wynik: " <<( x - y ) << endl;
        break;
    }
    cout << "Znak (x, jesli chcesz wyjsc): "; cin >> znak;
    if( wyjscie )
         return 0;
   
    cout << "Liczba: "; cin >> x;
    return 0;
}
A tak wygląda kod programu po rozwiązaniu problemu:
C/C++
#include <iostream>

using namespace std;

float x;
float y;
char znak;

int main()
{
    cout << "Liczba: "; cin >> x;
    cout << "Znak: "; cin >> znak;
    cout << "Liczba: "; cin >> y;
    switch( znak )
    {
    case '*':
        cout << "Wynik: " <<( x * y ) << endl;
        break;
       
    case '/':
        cout << "Wynik: " <<( x / y ) << endl;
        break;
       
    case '+':
        cout << "Wynik: " <<( x + y ) << endl;
        break;
       
    case '-':
        cout << "Wynik: " <<( x - y ) << endl;
        break;
    }
    cout << "Znak (x, jesli chcesz wyjsc): "; cin >> znak;
    bool wyjscie = znak == 'x';
    if( wyjscie )
         return 0;
   
    cout << "Liczba: "; cin >> x;
    return 0;
}
Domyślam się, że przed przeniesieniem zmiennej typu bool niżej, wynikiem tej zmiennej po wpisaniu pierwszego znaku (w czasie działania programu) był fałsz.
Ale skoro to zmienna, to w moim rozumowaniu po wpisaniu znaku "x" w końcowej fazie programu, powinien wynik zmiennej "wyjscie" (bool) dynamicznie zmienić się na prawda, zatem funkcja "if" powinna zrealizować instrukcję w niej zawartą. Tak ja rozumiem, ale skoro program nie działał po mojej myśli, to pewnie tak nie jest :P

Proszę o wytłumaczenie.
Z góry dziękuję :)
P-160105
Saran
» 2017-04-13 15:31:41
Wydaje mi się, że z powodu nadania zmiennej bool nieokreślonej wartości na pierwszym screenie.

Używaj znacznika [\cpp], aby wstawić kod.
P-160106
maly7
» 2017-04-13 18:44:17
Na początku zmiennej wyjscie przypisujesz wartość (znak == 'x') czyli ma ona wartość 0 (false). W dalszej części nie przypisujesz jej nowej wartości więc cały czas będzie ona miała wartość 0. To nie działa tak, że jak zmienisz wartość zmiennej znak na x to automatycznie zmieni Ci się wartość wyjscie na true.

Sprawdź sobie jak to działa:
C/C++
int main()
{
    cout << "Przed zmiana 'znak': w = " << wyjscie << ", z = " << znak << endl;
    znak = 'x';
    cout << "Po zmianie 'znak': w = " << wyjscie << ", z = " << znak << endl;
    wyjscie = znak == 'x';
    cout << "Po zmianie 'wyjscie': w = " << wyjscie << ", z = " << znak << endl;
    return 0;
}
P-160110
« 1 »
  Strona 1 z 1