Zadanie z pętlą do while

0

Cześć! Może mi ktoś powiedzieć dlaczego mój program nie działa poprawnie? Powinno być tak: podaję liczbę, sprawdzam czy podano prawidłową liczbę, czy jakiś znak. Jeśli znak, to wracam na początek i robię to aż użytkownik poda liczbę. Jeśli poda liczbę, to wyświetla "Udalo sie!" i pętla kończy się. Pętla kończy się również, gdy ktoś poda 0. Natomiast jest tak, że jeśli użytkownik poda znak, to pętla również się kończy, a powinna wrócić na początek. Gdzie mam błąd?

#include <iostream>
using namespace std;

int main()
{
    double liczba;
    bool czyWczytano;

    do
    {
        cout << "Podaj liczbe: ";
        cin >> liczba;
        czyWczytano = cin.good();
        cin.clear();
        cin.sync();

        if(czyWczytano == false)
        {
            cout << "Podales zla liczbe!" << endl;
            continue;                               //Powinno wrocic na poczatek petli
        }
        else
        {
            cout <<"Udalo sie!" << endl;
            break;
        }

    }while(liczba != 0);


    return 0;
}
0

A ile ta liczba wynosi na początku? Bo jak nic nie wczytasz to zrobisz porównanie ze zmienną o niewiadomej wartości!

0

To ma być część większego programu i tylko z nią mam problem. Chodzi o to:
Jest

cout << "Podaj liczbe: ";
      cin >> liczba;   
// Tutaj jest ta liczba i jeśli wynosi 0 to pętla ma się skończyć, jeśli wpisano znak, to użytkownik ma wpisać jeszcze raz aż poda liczbę, jeśli podał liczbę i jest różna od zera to pętla biegnie dalej do else i wykonuje obliczenia (w "pełnej wersji" programu).
Treść zadania napisał(a)

Napisz prosty kalkulator, który będzie potrafił dodawać, odejmować, mnożyć i dzielić. Program ten ma działać następująco:

  1. Wypisuje obecny wynik
  2. Wprowadź liczbę
  3. Wybierz działanie (jeżeli liczba różna od 0)
  4. Wykonaj obliczenia (jeżeli liczba różna od 0)
  5. Wróć do kroku 1.
  6. Jeżeli wprowadzoną liczbą jest 0, zakończ program.

dodanie znaczników <code class="cpp"> i <quote> - furious programming

0

Uff, ok, działa. To znaczy, że przy sprawdzaniu za pomocą bool w pętli mogą wystąpić takie bugi?
Ok, skończone.

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    int wybor;
    double liczba, wynik = 0;

    do
    {
        cout << "Obecny wynik: " << wynik << endl;

        cout << "[1] Dodawanie" << endl;
        cout << "[2] Odejmowanie" << endl;
        cout << "[3] Mnozenie" << endl;
        cout << "[4] Dzielenie" << endl;
        cout << "[5] Rezygnuj" << endl;
        cout << endl;

        cout << "Podaj liczbe: ";
        while(!(cin >> liczba))
        {
            cerr << "Zly znak!" << endl;
            cout << "Podaj prawidlowa liczbe: ";
            cin.clear();
            cin.sync();
        }
        if(liczba == 0)                              //*TEN IF
        {
            system("cls");
            cout << "Do widzenia!" << endl;
            exit(0);
        }

        cout << "Wybierz dzialanie: ";
        while(!(cin >> wybor))
        {
            cerr << "Zly znak!" << endl;
            cout << "Wybierz jeszcze raz ";
            cin.clear();
            cin.sync();
        }

        switch(wybor)
        {
        case 1:
            {
                wynik += liczba;
                break;
            }
        case 2:
            {
                wynik -= liczba;
                break;
            }
        case 3:
            {
                wynik *= liczba;
                break;
            }
        case 4:
            {
                wynik /= liczba;
                break;
            }
        case 5:
            {
                system ("cls");
                cout << "Do widzenia" << endl;
                exit(0);
            }
        default: cout << "Zly wybor" << endl; break;
        }
        system ("cls");

    }while(liczba != 0);

    return 0;
}

Ciekawi mnie jeszcze tylko jedno. Tak naprawdę to ten *if sprawdza czy wpisano 0. Jeśli tak, to on kończy pętlę. Jeśli nie byłoby tego if'a, to nawet jeżeli wpisałbym 0, to pętla nie skończy się. Jak to naprawić? Podejrzewam, że trzeba wtedy użyć pętli while, bo sprawdza ona warunek już na początku.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.