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

Pętla do... while - kalkulator

Ostatnio zmodyfikowano 2015-12-28 23:43
Autor Wiadomość
Badyl
Temat założony przez niniejszego użytkownika
Pętla do... while - kalkulator
» 2015-12-17 11:20:49
Witam
 Nie lubie zakładać nowych tematów, które gdzieś tam się już pochowały na forum, ale niestety brak wyszukiwarki jest bardzo uciążliwy w szukaniu odpowiedzi na pytania.
 
 Mam problem z pętlą. Mianowicie chce wywołać taki efekt w kalkulatorze, że jeśli zostanie wpisana litera zamiast liczby to program nie wysypie się i wyswietlając wszystko do końca. Tylko cofałby się do poprzedniej instrukcji tj. Podaj pierwsza liczbe:

Poniżej zamieszczam kod. Przy prosbie podania pierwszej liczby caly czas probuje rozwiązać ten problem. Jak juz go rozwiąże to wprowadze go do instrukcji o podanie drugiej liczby. Problem zaczyna sie od 12 linijki. Prosze o pomoc xD
C/C++
#include <iostream>
using namespace std;
int main()
{
   
    cout << "\t\t\tKALKULATOR wersja 1.0" << endl << endl;
    cout << "1) Dodawanie" << endl;
    cout << "2) Odejmowanie" << endl;
    cout << "3) Mnozenie" << endl;
    cout << "4) Dzielenie" << endl;
    cout << "\n\n W pozniejszym czasie bedziesz poproszony/a o w.w. nr dzialania, ktory bedziesz chcial/a wykonac." << endl;
    cout << "\nPodaj pierwsza liczbe - ";
    float a;
    cin >> a;
    cin.sync();
    cin.clear();
    if( cin.good() )
         cout << " Wpisales/as poprawnie. Lecimy dalej...";
    else
    do
    {
        cout << "Wystarczylo wpisac liczbe... Podaj pierwsza liczbe - ";
        cin >> a;
        cin.sync();
        cin.clear();
    } while( !( cin >> a ) );
   
    cout << "\nPodaj druga liczbe - ";
    float b;
    cin >> b;
    cin.sync();
    cin.clear();
    if( cin.good() )
         cout << " Wpisales/as poprawnie. Lecimy dalej...";
    else
    do
    {
        cout << "Wystarczylo wpisac liczbe...";
    } while( b > 0 );
   
    cout << " \nWiec zadecydowales/as. Pierwsza liczba to - " << a << ", a druga - " << b << endl;
    cout << " Majac owe liczby, ktore dzialanie matematyczne bedziesz chcial/a wykonac ? ( podaj nr ) " << endl;
    int dzialanie;
    cin >> dzialanie;
    switch( dzialanie )
    {
    case 1:
        cout << "Wynik = " << a + b << endl;
        break;
    case 2:
        cout << "Wynik = " << a - b << endl;
        break;
    case 3:
        cout << "Wynik = " << a * b << endl;
        break;
    case 4:
        cout << "Wynik = " << a / b << endl;
        break;
    default:
        cout << " Przykro mi, ale zla liczbe wpisales/as tym samym zle rownanie wybrales/as. Zegnam";
        break;
    }
   
   
    return 0;
}
P-142084
carlosmay
» 2015-12-17 11:36:29
C/C++
while( !( cin >> liczba; ) ) {
    //czyszczenie strumienia
}
P-142085
Badyl
Temat założony przez niniejszego użytkownika
» 2015-12-17 22:47:04
C/C++
C / C++
while( !( cin >> liczba; ) ) {
    //czyszczenie strumienia
}


Nie rozumie co chciales mi przekazac piszac to. Wiem, ze problem tkwi w whille  tylko nie wiem co wpisac aby petla cofala sie do zadania liczby.
P-142115
Andy20
» 2015-12-17 22:54:16
Pętla
While
 będzie się wykonywać dopóki nie podasz liczby.
P-142116
carlosmay
» 2015-12-17 23:24:10
Nie rozumie co chciales mi przekazac piszac to.
 Szybciej będzie napisać dodatkowe dwie linie kodu i sprawdzić jak to działa niż czekać na odpowiedź.

Wiem, ze problem tkwi w whille  tylko nie wiem co wpisac aby petla cofala sie do zadania liczby.
 Ten kod właśnie to robi.
P-142117
Badyl
Temat założony przez niniejszego użytkownika
» 2015-12-26 01:08:53
C/C++
#include <iostream>
using namespace std;
int main()
{
    float a, b;
    cout << "Podaj pierwsza liczbe - "; // Poczatek pierwszej liczby
    cin >> a;
    if( cin.fail() )
    do
    {
       
        cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - ";
        cin.clear();
        cin.sync();
       
    } while( !( cin >> a ) );
   
    cout << "Pierwasza liczba to - " << a << endl; //Koniec pierwszej liczby
   
    cout << "Podaj druga liczbe - "; //Poczatek drugiej liczby
    cin >> b;
    if( cin.fail() )
    do
    {
       
        cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - ";
        cin.clear();
        cin.sync();
       
    } while( !( cin >> b ) );
   
    cout << "Druga liczba to - " << b << endl; // Koniec drugiej liczby
   
   
   
    return 0;
}


W koncu to zrozumialem i teraz pojdzie z gorki ;) dziekuje za pomoc i zamykam temat
P-142366
carlosmay
» 2015-12-26 01:29:54

W koncu to zrozumialem
 
C/C++
cout << "Podaj pierwsza liczbe - "; // Poczatek pierwszej liczby
cin >> a;
if( cin.fail() ) // niepotrzebna instrukcja, mozna to wykryc w warunku petli
do
{
   
    cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - ";
    cin.clear();
    cin.sync();
   
} while( !( cin >> a ) ); // o tutaj

 
 To dobrze. Ten kod można zapisać, krócej wg wskazówki.
C/C++
cout << "Podaj pierwsza liczbe - "; // Poczatek pierwszej liczby
while( !( cin >> a ) ) { // tutaj jest tylko raz, a robi to samo, bez if'a      
    cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - ";
    cin.clear();
    cin.sync();
}
 
P-142368
Badyl
Temat założony przez niniejszego użytkownika
» 2015-12-26 20:30:31
Napisałem taki kalkulator :

C/C++
#include <iostream>
using namespace std;
int main()
{
    float a, b, wynik;
    int dzialanie;
   
   
    cout << " \t\t\tKalkulator   wersja 1.1" << endl << endl;
    do
    {
        cout << "\n\nPodaj pierwsza liczbe - "; // Poczatek pierwszej liczby
        while( !( cin >> a ) )
        {
            cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - ";
            cin.clear();
            cin.sync();
        }
        cout << "Pierwasza liczba to - " << a << endl << endl; //Koniec pierwszej liczby
       
        cout << "Podaj druga liczbe - "; //Poczatek drugiej liczby
        while( !( cin >> b ) )
        {
            cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - ";
            cin.clear();
            cin.sync();
        }
        cout << "Druga liczba to - " << b << endl << endl; // Koniec drugiej liczby
       
        cout << "\t\t\tMozliwe dzialania:" << endl << endl;
        cout << " [1] Dodawanie\t[2] Odejmowanie" << endl;
        cout << " [3] Mnozenie \t[4] Dzielenie" << endl;
        cout << " [5] Rezygnuje" << endl;
       
        cout << "\nKtore dzialanie chcesz wykonac na tych liczbach ? - ";
        while( !( cin >> dzialanie ) )
        {
            cout << "Podaj nr dzialania - ";
            cin.clear();
            cin.sync();
        }
       
        switch( dzialanie )
        {
        case 1:
            cout << a << " + " << b << " = " << a + b;
            break;
           
        case 2:
            cout << a << " - " << b << " = " << a - b;
            break;
           
        case 3:
            cout << a << " * " << b << " = " << a * b;
            break;
           
        case 4:
            if( b == 0 )
            {
                cout << " \n\nNie dzieli sie przez  ZERO - ZEGNAM !\n\n";
                return 0;
            }
            cout << a << " : " << b << " = " << a / b;
            break;
           
        case 5:
            cout << "\n\n\t\t\tDo nastepnego razu" << endl << endl;
            return 0;
            break;
        default:
            cout << "\n\n Wystarczy wybrac nr 1-5 odpowiadajacy konkretnemu dzialaniu.\n\n";
            return 0;
        }
       
    } while( cin != 0 );
   
    return 0;
}

Mam jeszcze tylko jedna zagwozdke. Kalkulator  ma wszystkie zabezpieczenia od niewłaściwych wpisywań z wyjatkiem jednej petli. Jesli wybierzemy numer niewlasciwego dzialania np 6, ktorego nie ma to jak zastosowac petle aby jeszcze raz zapytal nas o nr dzialania ?   Jestem otwarty na sugestie xD
P-142394
« 1 » 2
  Strona 1 z 2 Następna strona