Lekcja 17, zadanie 2, pętla do ... while nie działa prawidłowo
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Lekcja 17, zadanie 2, pętla do ... while nie działa prawidłowo

AutorWiadomość
Temat założony przez niniejszego użytkownika
Lekcja 17, zadanie 2, pętla do ... while nie działa prawidłowo
» 2020-11-05 20:04:06
Napotkałam na kolejny banalny problem, którego nie umiem przeskoczyć. Treść zadania jest następująca: "Zmodyfikuj kalkulator, który pisałeś w jednym ze wcześniejszych rozdziałów tak, aby korzystał on ze wcześniej napisanej funkcji wczytajLiczbe."
Zastosowałam w kodzie pętlę do ... while, żeby można było wykonać dowolną liczbę razy działania na wczytanych liczbach, gdy się wciśnie "e". I problem jest taki, że jeśli wciśnie się "e" przed wyborem rodzaju działania, pętla się wykonuje i znów pojawia się lista możliwych do wykonania działań i można wybrać jedno z nich, lub "z" (zamknięcie programu) lub "e". Ale gdy wybierze się jedno z tych działań i program je wykona, już nie można wykonać pętli. Wciśnięcie "e" zamyka program. Czemu tak się dzieje?
Kod wygląda następująco:

C/C++
#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;
int wczytajLiczbe1()
{
    cout << "Podaj liczbe: ";
    int liczba1;
    cin >> liczba1;
    while( cin.fail() )
    {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cout << "To nie jest liczba. Podaj liczbe: ";
        cin >> liczba1;
    }
    return( liczba1 );
}
int wczytajLiczbe2()
{
    cout << "Podaj liczbe: ";
    int liczba2;
    cin >> liczba2;
    while( cin.fail() )
    {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cout << "To nie jest liczba. Podaj liczbe: ";
        cin >> liczba2;
    }
    return( liczba2 );
}

int main()
{
    cout << "Kalkulator." << endl;
   
    int dzialanie = 0;
    char a = 'a';
    char b = 'b';
    char c = 'c';
    char d = 'd';
    char e = 'e';
    char z = 'z';
    int liczba1 = wczytajLiczbe1();
    int liczba2 = wczytajLiczbe2();
    do
    {
        cout << "Wybierz dzialanie: " << endl;
        cout << "dodawanie " << a << endl;
        cout << "odejmowanie " << b << endl;
        cout << "mnozenie " << c << endl;
        cout << "dzielenie " << d << endl;
        cout << "Aby zakonczyc program wcisnij " << z << endl;
        cout << "Aby ponownie wykonac obliczenia wcisnij " << e << endl;
       
        dzialanie = _getch();
       
        if( dzialanie == a || dzialanie == b || dzialanie == c || dzialanie == d ) {
            switch( dzialanie )
            {
            case 'a':
                cout << "Suma = " << liczba1 + liczba2 << endl;
                break;
               
            case 'b':
                cout << "Roznica = " << liczba1 - liczba2 << endl;
                break;
               
            case 'c':
                cout << "Iloczyn = " << liczba1 * liczba2 << endl;
                break;
               
            case 'd':
                cout << "Iloraz = " << liczba1 / liczba2 << endl;
                break;
               
            }
        }
       
    } while( dzialanie == e );
   
    return 0;
}
P-177692
» 2020-11-06 13:40:09
Ten kod
while( dzialanie == e );
 powinien wyglądać w ten sposób:
while( dzialanie != z );
P-177693
« 1 »
 Strona 1 z 1