Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Lekcja 9] - problem z czyszczeniem buforu

Ostatnio zmodyfikowano 2011-11-22 19:42
Autor Wiadomość
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:
C/C++
#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?
P-44531
pekfos
» 2011-11-22 19:28:44
Kompilator: Code::Blocks 10.05
fail. C::B to nie jest kompilator!

http://cpp0x.pl/kursy/Kurs-STC/169
P-44533
DejaVu
» 2011-11-22 19:33:34
C/C++
cin.sync();
cin.clear();
W złej kolejności wywołałeś powyższe linijki. Powinno być:
C/C++
cin.clear();
cin.sync();
P-44534
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()?
P-44540
pekfos
» 2011-11-22 19:42:33
bo nie zsynchronizujesz jak masz błąd który to blokuje.
P-44541
« 1 »
  Strona 1 z 1