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

Rozdział 15 - zadanie domowe - kalkulator - problem

Ostatnio zmodyfikowano 2016-08-10 10:28
Autor Wiadomość
Speedwaymonia93
Temat założony przez niniejszego użytkownika
Rozdział 15 - zadanie domowe - kalkulator - problem
» 2016-08-08 10:36:03
Cześć! Wiem że już to zagadnienie się pojawiło na forum, ale zostało zamknięte i nie ma możliwości dopisania do niego nowego problemu więc dlatego zakładam nowy temat. Jestem początkująca więc proszę o wyrozumiałość. Napisałam kod i "prawie działa". Tzn mam dwa problemy z którymi nie mogę sobie poradzić:

1. Jeśli wpisuję literę zamiast liczby to program nie reaguje na to i wykonuje działanie które sobie wybiorę i oczywiście zwraca durne wyniki. Jak mam to poprawić żeby działało?

2. Program się zapętla ale nie tak jak powinien. Chodzi mi o to że jak wpisze dwie liczby i potem wybiorę działanie to program wyświetla mi napis np. "Wynik dodawania = 35" w nieskończoność. Również nie powraca do menu początkowego (czyli do wpisania liczb i wyboru działania) po wpisaniu liczby 5.

Oto mój kod:
#include <iostream>
#include <limits>
int main()
{
int obecnyWynik = 0;
int liczbaA;
int liczbaB;
int dzialanie;
float wynik4;

std::cout << "Obency wynik: " << obecnyWynik << std::endl;
std::cout << "Podaj liczne pierwsza: ";
std::cin >> liczbaA;
std::cin.clear();
std::cin.sync();

if (liczbaA > 0)
{std::cout << "Podaj liczbe druga: ";
std::cin >> liczbaB;
std::cin.clear();
std::cin.sync();

}

std::cout << "Wybierz dzialanie z panelu \n";

std::cout << " [1] Dodawanie \n";
std::cout << " [2] Odejmowanie \n";
std::cout << " [3] Mnozenie \n";
std::cout << " [4] Dzielenie \n";
std::cout << " [5] Rezygnuj \n";
std::cin >> dzialanie;

do{
switch(dzialanie)
{
    case 1:
    std::cout << "Wynik dodawania = " << liczbaA + liczbaB << std::endl;
    break;

    case 2:
    std::cout << "Wynik odejmowania = " << liczbaA - liczbaB << std::endl;
    break;

    case 3:
    std::cout << "Wynik mnozenia = " << liczbaA * liczbaB << std::endl;
    break;

    case 4:
    std::cout << "Wynik dzielenia = " << wynik4 << std::endl;
    break;

    case 0:
    return 0;
}

}while ( dzialanie !=0 );



return 0;
}
P-150656
karambaHZP
» 2016-08-08 10:41:45
1.
cin.ignore()
 plus pobieranie poszczególnych wartości w osobnych pętlach.
2. Pobieranie danych użytkownika też powinno być w pętli głównej ze
switch
em.
P-150657
jundymek
» 2016-08-09 01:31:31
Ja się zapytam o samą istotę zadania. Zauważyłem, że wszyscy wpisują 2 liczby. Albo źle zrozumiałem zadanie, albo autor wymaga wprowadzenia jednej liczby, która po prostu sumuje wynik. Ja to zrobiłem w ten sposób, że zacząłem ze zmienną wynik = 0 i potem program to modyfikuje. Jak to jest?
1. Wypisuje obecny wynik
2. Wprowadź liczbę
3. Wybierz działanie (jeżeli liczba różna od 0)
4. Wykonaj obliczenia (jeżeli liczba różna od 0)
5. Wróć do kroku 1.
6. Jeżeli wprowadzoną liczbą jest 0, zakończ program.

Poniżej mój kod jakby ktoś chciał wytknąć błędy początkującemu:

#include <iostream>
#include <cstdlib>

using namespace std;

float wynik = 0;
float liczba;
int wybor;

int main()
{
    do
    {
    cout << "Aktualny wynik to: " << wynik << endl;
    cout << "Podaj liczbe: ";
    cin >> liczba;
    while (cin.fail())
    {
        cin.clear();
        cin.sync();
        cout << "Wpisz poprawna liczbe: ";
        cin >> liczba;
    }
    if (liczba == 0 && cin.good())
        {cout << "Wybrales 0, wiec konczymy";
        exit(0);}
    else

    cout <<"-------------MENU----------- " << endl;
    cout <<"[1] Dodawanie" << endl;
    cout <<"[2] Odejmowanie" << endl;
    cout <<"[3] Mnozenie" << endl;
    cout <<"[4] Dzielenie" << endl;
    cout <<"[5] Rezygnacja" << endl;

    cin >> wybor;
    while (cin.fail() || ((wybor < 1 || wybor > 5)))
    {
        cin.clear();
        cin.sync();
        cout << "Wpisz poprawne dzialanie: ";
        cin >> wybor;
    }
    switch(wybor)
    {
    case 1:
        wynik += liczba;
        break;
    case 2:
        wynik -= liczba;
        break;
    case 3:
        wynik *= liczba;
        break;
    case 4:
        wynik /= liczba;
        break;
    case 5:
        exit(0);

    }} while (wybor != 5);
    return 0;
}
P-150676
Speedwaymonia93
Temat założony przez niniejszego użytkownika
» 2016-08-10 10:28:35
Dzięki za pomoc :) Posiedzę jeszcze nad tym
P-150704
« 1 »
  Strona 1 z 1