• 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.

0 głosów
542 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 5,443 wizyt
0 głosów
0 odpowiedzi 367 wizyt
pytanie zadane 10 lipca 2022 w PHP przez MKolaj15 Bywalec (2,270 p.)

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,325 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...