Rozdzial 15 zadanie 2
Ostatnio zmodyfikowano 2015-10-22 04:12
johey13 Temat założony przez niniejszego użytkownika |
Rozdzial 15 zadanie 2 » 2015-10-21 14:36:01 Witam! Mam problem z ukończeniem zadania z tematu. Polega on na tym, że nie udaje mi się zablokować wciskania liter oraz w momencie wybory "Zrezygnuj" zakończeniem programu. Oczekuję zrozumiałych dla początkującego sugestii i porad jak rozwiązać ten problem. Z góry dziękuję. #include <iostream> #include <cstdio> #include <cstdlib> using namespace std;
int main() { do { int wybor; int wyjscie; bool wybor01, wyjscie01; cin.clear(); cin.sync(); system( "cls" ); cout << "\n\t\t K A L K U L A T O R" << endl; cout << "\t\t=======================" << endl; cout << "\nWybierz dzialanie jakie chcesz wykonac :" << endl; cout << "\n\t[1] Dodawanie." << endl; cout << "\t[2] Odejmowanie." << endl; cout << "\t[3] Mnozenie." << endl; cout << "\t[4] Dzielenie." << endl; cout << "\t[5] Rezygnuj." << endl; cout << "\n\tWybieram : "; cin >> wybor; wybor01 = cin.good(); cin.clear(); cin.sync(); switch( wybor ) { case 1: do { system( "cls" ); cout << "\n\t\tWybrales Dodawanie." << endl; cout << "\t\t-------------------" << endl; float liczba01, liczba02; cout << "\nWpisz pierwsza liczbe : "; cin >> liczba01; cout << "Wpisz druga liczbe : "; cin >> liczba02; cout << "\n\t\tWynik dodawania liczb : " << liczba01 << " + " << liczba02 << " = " << liczba01 + liczba02 << endl; cout << "\n\n\tAby kontynuawac wcisnij dowolna cyfre, zakonczyc ( wcisnij 0 )."; cin >> wyjscie; cin.clear(); cin.sync(); } while( wyjscie != 0 ); break; case 2: do { system( "cls" ); cout << "\n\t\tWybrales odejmowanie." << endl; cout << "\t\t---------------------" << endl; float liczba01, liczba02; cout << "\nWpisz pierwsza liczbe : "; cin >> liczba01; cout << "Wpisz druga liczbe : "; cin >> liczba02; cout << "\n\t\tWynik odejmowania liczb : " << liczba01 << " - " << liczba02 << " = " << liczba01 - liczba02 << endl; cout << "\n\n\tAby kontynuawac wcisnij dowolna cyfre, zakonczyc ( wcisnij 0 )."; cin >> wyjscie; cin.clear(); cin.sync(); } while( wyjscie != 0 ); break; case 3: do { system( "cls" ); cout << "\n\t\tWybrales mnozenie." << endl; cout << "\t\t------------------" << endl; float liczba01, liczba02; cout << "\nWpisz pierwsza liczbe : "; cin >> liczba01; cout << "Wpisz druga liczbe : "; cin >> liczba02; cout << "\n\t\tWynik mnozenia liczb : " << liczba01 << " * " << liczba02 << " = " << liczba01 * liczba02 << endl; cout << "\n\n\tAby kontynuawac wcisnij dowolna cyfre, zakonczyc ( wcisnij 0 )."; cin >> wyjscie; cin.clear(); cin.sync(); } while( wyjscie != 0 ); break; case 4: do { system( "cls" ); cout << "\n\t\tWybrales dzielenie." << endl; cout << "\t\t-------------------" << endl; float liczba01, liczba02; cout << "\nWpisz pierwsza liczbe : "; cin >> liczba01; cout << "Wpisz druga liczbe : "; cin >> liczba02; cout << "\n\t\tWynik dzielenia liczb : " << liczba01 << " / " << liczba02 << " = " << liczba01 / liczba02 << endl; cout << "\n\n\tAby kontynuawac wcisnij dowolna cyfre, zakonczyc ( wcisnij 0 )."; cin >> wyjscie; cin.clear(); cin.sync(); } while( wyjscie != 0 ); break; } } while( 5 ); return 0; }
|
|
carlosmay |
» 2015-10-21 15:53:55 } while( 5 ); to jest pętla nieskończona. w momencie wybory "Zrezygnuj" zakończeniem programu |
do warunku kończącego pętle główną dodaj zmienną, którą będziesz zmieniał w case 5: aby pętla kończyła się kręcić. nie udaje mi się zablokować wciskania liter |
niestety tutaj nie ma cudownego leku. Musisz sam napisać kod wykrywający nieprawidłowe dane wprowadzane przez użytkownika. int wprowDane() { int a; char ch; do { while( !( cin >> a ) ) { cin.clear(); cin.ignore( 100, '\n' ); cout << "Jeszce raz: "; } cin.get( ch ); if( ch == '.' ) { while( ch != '\n' ) cin.get( ch ); cout << "Nie calkowita: "; ch = 'a'; continue; } if( ch != '\n' ) { while( ch != '\n' ) cin.get( ch ); cout << "Sa litery: "; ch = 'a'; continue; } } while( cin.fail() || ch == 'a' ); return a; }
Są bardziej zaawansowane kody, ale jak na początek ten wystarczy. Sugestia jeśli poznałeś funkcje: Kod należałoby napisać w oparciu o funkcje. Zyska na czytelności, będzie krótszy i łatwiejszy do ogarnięcia. |
|
Rashmistrz |
» 2015-10-21 19:48:37 [...] niestety tutaj nie ma cudownego leku. |
Leku nie ma, ale sposób jest. getch() + isdigit()#include <iostream> #include <conio.h> #include <cctype>
int main() { char c; std::cout << "Press number to exit: "; do { c = getch(); } while( !isdigit( c ) ); std::cout << c; return 0; }
|
|
FatecCpp |
» 2015-10-22 00:31:40 Najprostsza opcja zakończenia programu to w case 5 przed breake dac po prostu return i po sprawie.
|
|
carlosmay |
» 2015-10-22 04:12:53 w case 5 przed breake dac po prostu return i po sprawie. |
Można też drzwi z buta otwierać. |
|
« 1 » |