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

Rozdzial 15 zadanie 2

Ostatnio zmodyfikowano 2015-10-22 04:12
Autor Wiadomość
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ę.

C/C++
#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 5:
                    {
                    system( "cls" );
                    cout << "\n\n\t\tDziekuje za skorzystanie z mojego programiku.\n\n\t\tJest to moj pierwszy kalkulator.\n\n\t\tMam nadzieje ze spelnilem oczekiwania.\n\n\t\tDziekuje i pozdrawiam.  :)" << endl;
                    }
                    break;*/
           
        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;
}
 
P-138980
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.
C/C++
int wprowDane() // ta funkcja wczytuje tylko całkowite
{
    int a;
    char ch;
    do {
        while( !( cin >> a ) ) { // wykrywanie czy udało się cokolwiek wczytać
            cin.clear();
            cin.ignore( 100, '\n' );
            cout << "Jeszce raz: ";
        }
        cin.get( ch );
        if( ch == '.' ) { // ten człon wykrywa czy liczba jest całkowita, niepotrzebny dla float, double itd
            while( ch != '\n' )
                 cin.get( ch );
           
            cout << "Nie calkowita: ";
            ch = 'a';
            continue;
        }
        if( ch != '\n' ) // ten wykrywa czy po podaniu liczby nie podano jeszcze literki, jesli tak oczysc strumien
        {
            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.
P-138986
Rashmistrz
» 2015-10-21 19:48:37
[...] niestety tutaj nie ma cudownego leku.
Leku nie ma, ale sposób jest. getch() + isdigit()

C/C++
#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;
}
P-138996
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.
P-139014
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ć.
P-139017
« 1 »
  Strona 1 z 1