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

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

Ostatnio zmodyfikowano 2020-11-06 13:40
Autor Wiadomość
r.deer
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
kubasuperpl
» 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