Rozdział 15 - zadanie domowe - kalkulator - problem
Ostatnio zmodyfikowano 2016-08-10 10:28
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; }
|
|
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. |
|
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; }
|
|
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
» 2016-08-10 10:28:35 Dzięki za pomoc :) Posiedzę jeszcze nad tym |
|
« 1 » |