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

Rozdział 15. Pętla do... while - kalkulator

Ostatnio zmodyfikowano 2014-08-20 12:08
Autor Wiadomość
marmal
» 2014-07-31 19:10:01
A gdzie zabezpieczasz program przed wprowadzeniem niepoprawnych danych?
Masz zdefiniowaną zmienną "dzialanie" typu int a wprowadzasz do niej literę.. Na to program nie powinien pozwolić.
P-114786
Saiunkoku
Temat założony przez niniejszego użytkownika
» 2014-08-01 20:54:57
Tutaj:
C/C++
default:
cout << "Nie wybrałeś działania\n";
break;

Ze zmienną 'dzialanie' nie ma problemu. Kiedy wpisze się literę, to pętla się nie kończy, tylko wykonuje od nowa, działa to tak jak chcę.
Problem jest ze zmienną 'a' właśnie taki, że nie wiem jak to zabezpieczyć w ten sposób, żeby pętla się nie kończyła, tylko tak jak w przypadku wyboru działania, wykonywała się od nowa.
P-114892
1aam2am1
» 2014-08-01 21:54:23
Wpisuje treść do zminnej string sprawdzaj czy jest tam liczba
C/C++
#include <iostream> //c++11 on

int result; //wynik wpisany
sscanf( str.c_str(), "%i", & result ) == EOF //jest równe to nie jest liczba, nie równe znaczy że zamiana c-string na int się zakończyła pomyślnie

Powinno działać!
P-114894
elu3
Zadanie
» 2014-08-06 17:48:45
Kluczem do rozwiązania ostatecznego zadania jest zrobienie zadania pierwszego. Do zrobienia zadań nie są potrzebne żadne dodatkowe wiadomości poza tymi, które były w poprzednich rozdziałach. Ja wykorzystałam cin.good(),if...else,switch, case,break i pętle do... while.
Wszystko co zamierzałam wykonuje się, choć jako że dopiero zaczynam swoją przygodę z programowaniem to kod nie jest zbyt piękny.

P-115129
gracu
» 2014-08-08 17:27:57
zabezpieczenie przed wprowadzaniem liter (chyba najprostsza metoda)
C/C++
int zmienna;
while( !( cin >> zmienna ) ) //dopóki strumień jest w stanie błędu -> dopóki podawane są błędne dane
{
    //ew komunikat błędu
    cin.clear(); //kasowanie flagi błędu strumienia
    cin.sync(); //kasowanie zbędnych znaków z bufora
}
//tutaj na pewno wczytano poprawne dane do zmienna
P-115213
mlOOdy
kalkulator
» 2014-08-19 13:40:36
Witam,
miałem podobny problem jak Saiunkoku (gdy wstawiałem coś innego niż liczbę program kończył pracę) ale idąc za radą elu3 rozwiązałem go tak jak poniżej. :D
Ze swojej strony chciałbym dodać, zapytać się czy można i jeśli tak to jak postawić kilka niezależnych od siebie warunków (aby co najmniej jeden z nich był spełniony myślałem żeby zastosować coś z użyciem || ale mi nie wychodziło) celem mojego zapytania jest to żeby gdy poda się zły numer case ( coś innego niż 1 lub 2 lub 3 lub 4 lub 5) program nie powracał do samego początku tylko do wypisania "Wybierz co chcesz zrobic "(...).
C/C++
#include <iostream>
int main()
{
    double wynik;
    wynik = 0;
    double liczba;
    int numer;
    bool a;
   
    do
    {
        do
        {
            std::cout << "obecny wynik to: " << wynik << std::endl;
            std::cout << "wprowadz liczbe: " << std::endl;
            std::cin.clear();
            std::cin.sync();
            std::cin >> liczba;
            std::cin.good();
            a = std::cin.good();
        } while( a == false );
       
        if( liczba != 0 )
        {
            //do{
            std::cout << "Wybierz co chcesz zrobic: " << std::endl;
            std::cout << "[1] Dodawanie" << std::endl;
            std::cout << "[2] Odejmowanie" << std::endl;
            std::cout << "[3] Mnozenie" << std::endl;
            std::cout << "[4] Dzielenie" << std::endl;
            std::cout << "[5] Rezygnuj" << std::endl;
            std::cin.clear();
            std::cin.sync();
            std::cin >> numer;
           
            switch( numer )
        { case 1:
               
               
                wynik = wynik + liczba;
                break;
               
            case 2:
               
                wynik -= liczba;
                break;
               
            case 3:
               
                wynik = wynik * liczba;
                break;
               
            case 4:
               
                wynik = wynik / liczba;
                break;
               
            case 5:
                break;
            default:
                break;
            }
           
            //}while (numer != 1);
        } else
             std::cout << "Wybrales 0 : koniec programu" << std::endl;
       
    } while( liczba != 0 );
   
   
    return 0;
   
   
}
P-115721
Moorfox
» 2014-08-19 14:52:46
Wstaw to w [c.p.p][/c.p.p](usun kropki) bo nie potrafie tego czytać jak na razie mogę tylko zasugerować:
C/C++
default:
continue;
No ale ciężko powiedzieć cokolwiek o tym kodzie więc nie jestem pewien

EDIT:
Domyślam się, że chodziło ci jeszcze o:
C/C++
while( numer < 1 || numer > 5 );

Nie nawidzę takich warunków brudzą w kodzie


Po za tym załóż własny temat nie odświeżasz jakiś przed 11 dni
P-115724
mlOOdy
kalkulator
» 2014-08-20 12:08:05
Dzięki Moorfox, właśnie o to mi chodziło :D
P-115802
1 « 2 »
Poprzednia strona Strona 2 z 2