[Lekcja 9] - problem z czyszczeniem buforu
Ostatnio zmodyfikowano 2011-11-22 19:42
argo24 Temat założony przez niniejszego użytkownika |
[Lekcja 9] - problem z czyszczeniem buforu » 2011-11-22 19:27:06 Witam. Mam problem z następującym zadaniem domowym:
Napisz program, który wczyta trzy liczby rzeczywiste, a na końcu programu je wszystkie wypisze. Zadbaj o to, by bufor strumienia wejściowego był za każdym razem czyszczony. Wynik końcowy powinien również zawierać informacje czy wczytanie danej liczby się powiodło.
Mój kod wygląda tak:
#include<iostream> using namespace std; float a, b, c; bool i, j, k;
int main() { cout << "Wprowadz liczbe I: "; cin >> a; i = cin.good(); cin.sync(); cin.clear(); cout << "Wprowadz liczbe II: "; cin >> b; j = cin.good(); cin.sync(); cin.clear(); cout << "Wprowadz liczbe III: "; cin >> c; k = cin.good(); cin.sync(); cin.clear(); cout << endl << endl; cout << "Liczba I: " << a << " Czy udalo sie wczytac: " << i << endl; cout << "Liczba II: " << b << " Czy udalo sie wczytac: " << j << endl; cout << "Liczba III: " << c << " Czy udalo sie wczytac: " << k << endl; }
Wszystko na pozór działa OK:
[a href="http://img580.imageshack.us/img580/4559/cpp1.png"]
Ale kiedy wpisana liczba zaczyna się od niedozwolonego znaku program nie pozwala wczytać kolejnych liczb, nawet po wyczyszczeniu bufora:
[a href="http://img831.imageshack.us/img831/7876/cpp2.png"]
Środowisko: Code::Blocks 10.05
System: Windows XP Pro
Co jest nie tak? |
|
pekfos |
» 2011-11-22 19:28:44 |
|
DejaVu |
» 2011-11-22 19:33:34
W złej kolejności wywołałeś powyższe linijki. Powinno być:
|
|
argo24 Temat założony przez niniejszego użytkownika |
» 2011-11-22 19:41:18 OK. Dzięki, wszystko działa. A tak z ciekawości, to od strony technicznej, dlaczego najpierw musi być cin.clear()? |
|
pekfos |
» 2011-11-22 19:42:33 bo nie zsynchronizujesz jak masz błąd który to blokuje. |
|
« 1 » |