Zadanie 1. Pętla do...while
Ostatnio zmodyfikowano 2014-06-18 14:31
Haryen Temat założony przez niniejszego użytkownika |
Zadanie 1. Pętla do...while » 2014-06-17 22:03:40 Cześć! Zrobiłem pierwsze zadanie z lekcji do..while za pomocą samych boolów, ale chciałem to również zrobić ifami. Problem w tym, że kiedy uruchamiam program i wpiszę na przykład 'e', to wyświetla mi "Nieprawidlowy znak! Podaj prawidlowa liczbe: " (ok, tak ma być), ale kiedy wpiszę nieprawidłowy znak jeszcze raz, to muszę wpisywać liczbę 2 razy. Nie wiem jak to wytłumaczyć, najlepiej gdybyście sami sprawdzili. Pewnie wina leży po stronie if( !( cin >> liczba ) ) oraz cin >> liczba; , ale nie wiem jak to naprawić. Treść zadania: Napisz program, który wczyta liczbę, a następnie wypisze ją na ekranie. Zabezpiecz przed wczytaniem nieprawidłowej liczby. 1. Podaj liczbę 2. Jeżeli błąd, wróć do kroku 1. 3. Wypisz liczbę, która została podana. Kod: #include <iostream>
using namespace std;
int main() { double liczba; cout << "Podaj liczbe: "; do { if( !( cin >> liczba ) ) { cin.clear(); cin.sync(); cerr << "Nieprawidlowy znak!" << endl; cout << "Podaj prawidlowa liczbe: "; cin >> liczba; bool czySukces = cin.good(); cin.clear(); cin.sync(); if( czySukces ) { cout << "Liczba to: " << liczba << endl; break; } } else { cout << "Liczba to: " << liczba << endl; break; } } while( !( cin >> liczba ) ); return 0; }
|
|
pekfos |
» 2014-06-17 22:40:47 Nie wiem jak to wytłumaczyć, najlepiej gdybyście sami sprawdzili. |
Po co sprawdzać, od razu widać.. Sprawdzenie warunku while wymaga podania dodatkowej liczby. while( !( std::cin >> liczba ) ) { std::cerr << "blablabla\n"; std::cin.clear(); std::cin.sync(); } std::cout << liczba; |
|
Haryen Temat założony przez niniejszego użytkownika |
» 2014-06-18 14:31:29 Ok, wszystko jasne. Już wszystko działa. Jeśli chciałbym rozwiązać to w taki sposób, to jedynym wyjściem jak rozumiem jest pętla while, bo ona sprawdza warunek na początku, tak? #include <iostream>
using namespace std;
int main() { double liczba; cout << "Podaj liczbe: "; while( !( cin >> liczba ) ) { cerr << "Nieprawidlowa liczba!" << endl; cout << "Podaj prawidlowa liczbe: "; cin.clear(); cin.sync(); } cout << "Twoja liczba: " << liczba << endl; return 0; }
A czy na tę chwilę najlepsze rozwiązanie z pętlą do...while jest takie? Można coś tu usprawnić? #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 << "Nieprawidlowa liczba!" << endl; continue; } } while( czyWczytano == false ); cout << "Twoja liczba: " << liczba << endl; return 0; }
|
|
« 1 » |