• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z rozpoczynaniem prostego programu po błędzie od nowa.

Object Storage Arubacloud
0 głosów
222 wizyt
pytanie zadane 30 maja 2015 w C i C++ przez JogiMichu Nowicjusz (180 p.)
edycja 30 maja 2015 przez JogiMichu

Witam!

Program pozwala na wpisanie dowolnej całkowitej liczby z zakresu 0-10 i dodaniu do tej pierwszej drugiej liczby z tego samego zakresu.

Problem polega na tym, że kiedy użytkownik błędnie podaje drugą liczbę to program wyświetla błąd i rozpoczyna się od nowa. Porządane działanie to takie, że program wyświela błąd i pozwala na ponowne wpisanie drugiej liczby.

Proszę o wyrozumiałość: przeszedłem dopiero 2.5 lekcji Pana Mirosława o C++....

Proszę o info gdzie mogę szukać rozwiązania- nie oczekuję gotowca- ba, byłby nawet bardzo niewskazany:)

Program służy mojemu 3.5letniemu synkowi do nauki dodawania i oswaja go z komputerem:)

 

Kod pisany w code::bloks13.12 podaję poniżej:

#include <iostream>
#include <windows.h>
using namespace std;

int cyfra1, cyfra2;

int main()
{
    cout << "Witaj! Pocwiczymy dzisiaj dodawanie ;)" << endl;
    cout << "Napisz liczbe od 0 do 10" << endl;
    while(!(cin>>cyfra1))
    {
    cin >> cyfra1;
    cin.clear();
    cin.ignore();
    }
    if ((cyfra1<0)||(cyfra1>10))
        {
        cout << "Niepoprawna liczba!!! Wybierz liczbe od 0 do 10" << endl;
        Sleep(3000);
        }
    else
        {
        cout << "Dodamy teraz druga liczbe" << endl;
        cout << "Napisz druga liczbe od 0 do 10" << endl;
        while (!(cin>>cyfra2))
            {
            cin >> cyfra2;
            cin.clear();
            cin.ignore();
            }
        cout << cyfra1 << "+" << cyfra2 << endl;
        if ((cyfra2<0)||(cyfra2>10))
            {
            cout << "Niepoprawna liczba!!! Wybierz liczbe od 0 do 10" << endl; 
/*
w tym miejscu wyświetla się komunikat o wpisaniu błędnie drugiej liczby
*/
            }
        else
            {
            int wynik = cyfra1+cyfra2;
            cout << "Teraz sprawdzimy jaki wyjdzie nam wynik dodawania: " << endl;
            Sleep(1000);
            cout << cyfra1 << " + " << cyfra2 << " = " << wynik << endl;
            Sleep(5000);
            }
        }
system("cls");
main ();

    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 30 maja 2015 przez 0liver Obywatel (1,070 p.)

Napisze ci to słownie żeby nie wstawiać gotowca. Po wpisaniu drugiej liczby twój program wykonuje coś takiego: Sprawdz czy cyfra2 jest nie poprawna. Jeśli jest nie poprawna to wyświetl błąd. W przeciwnym przypadku wykonaj dalsze obliczenia.

Ty natomiast chciałbyś uzyskać coś takiego: Wprowadzaj cyfre2 dopuki nie jest ona poprawna (wyświetl błąd i powtórz). Kiedy jest poprawna wykonuj dalsze obliczenia.

Sądząc po tym kodzie powinieneś dać sobie z tym rade.wink Pozdrawiam

0 głosów
odpowiedź 30 maja 2015 przez Xeon Użytkownik (800 p.)
Cześć

Po pierwsze złe warunki w pętli while. Pętle się nigdy nie wykonują, jedyne co się wykonuje to ich warunek, czyli po prostu wczytanie liczby.

Po drugie w złym miejscu if'y, nie sądzisz, że powinny być w pętli, by wczytać liczbę na nowo?

Jak poprawisz te dwie rzeczy, będzie okej, kodu tak jak nie chciałeś nie będę podawał.
komentarz 31 maja 2015 przez JogiMichu Nowicjusz (180 p.)
Dzięki za podpowiedzi.

Oliver faktycznie dokładnie ma to tak wyglądać jak podajesz.

Xeon pętla while została dodana w takiej postaci, ponieważ ma ona blokować wpisanie innych znaków niż liczby - rozwiązanie znalazłem u wujka googla, nie pamiętam na jakiej stronie...

Pokombinuję dzisiaj z tymi podpowiedziami ale dopiero jak dokończę lekcję o pętlach;)
komentarz 31 maja 2015 przez JogiMichu Nowicjusz (180 p.)
Xeon już rozumiem co miałeś na myśli z niewykonywaniem się pętli. Bo nawet jeżeli wpiszę literę a następnie cyfrę tzn.: e3 albo t6y - to program i tak wypisuje mi na ekran cyfrę pomijając wszelkie litery. Co jednak nie musi być traktowane jako błąd- w laptopie nie mam numerycznej klawiatury więc małemu zdarzy się wpisać przypadkiem jakąś literkę :)
komentarz 31 maja 2015 przez Xeon Użytkownik (800 p.)
Druga sprawa, dwa razy wprowadzasz zmienną przy warunku pętli i w samej pętli. Trzecia sprawa zabezpieczenia przeciwko ŁOSIOM najlepiej wprowadzać na koniec, na początku skupić się na prawidłowym działaniu.

Podobne pytania

0 głosów
0 odpowiedzi 4,500 wizyt
0 głosów
0 odpowiedzi 195 wizyt
pytanie zadane 10 lipca 2022 w PHP przez MKolaj15 Bywalec (2,270 p.)

92,566 zapytań

141,420 odpowiedzi

319,614 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...