Obsluga strumienia wejsciowego

0

Kod napisany tylko i wylacznie na potrzeby zilustrowania problemu.

#include <iostream>
using namespace std;

int main()
{

int liczba;
    cout << "Sprawdzamy czy liczba jest PARZYSTA czy NIE. " << endl;
      cout << "Podaj liczbe: ";
    cin >> liczba;
    cin.clear();
    cin.sync();


    while ( cin >> liczba )
    {


    if ( (liczba%2) == 0 )
    {
        cout << "Liczba jest PARZYSTA" << endl;
    }
   else
    {
     cout << "Liczba jest NIEPARZYSTA" << endl;
    }
    cout << "Podaj liczbe: ";
    cin >> liczba;
    cin.clear();
    cin.sync();
    }



    return 0;
}




Czemu pod uwage brana jest dopiero DRUGA wprowadzona wartosc?
Załóżmy sytuacje
Wprowadzam wartosc 3 (zadnej reakcji, tak jakby program nadal czekal na wprowadzeni wartosci)
Wprowadzam kolejny raz 3 ( dopiero teraz program odczytuje wartosc).
Gdzie popełniłem błąd?

2
    cin >> liczba;
    cin.clear();
    cin.sync();
 
    while ( cin >> liczba )

Czego się po tym spodziewasz? Wczytujesz liczbę, a potem w warunku pętli wczytujesz ją ponownie.

0

@kq:
To ten warunek działa w taki sposob ze wczytuje kolejny raz liczbe? Bylem przekonany ze konwertuje na bool i zwraca true albo false w zaleznosci od tego czy wczyranie danych sie udalo, czy też nie - przynajmniej tak gdzies przeczytalem.

0

operator>> wczytuje. Wynikiem jest strumień, który skonwertowany na bool mówi, czy był błąd czy nie.

W ogóle w tym przypadku nie widzę powodu aby wywoływać clear i sync.

while(cin >> liczba){ /* ... */ }
0

@kq:
W takim razie powinienem to po prostu zrzutować sam na wartosc bool i to ten warunek wpisac jako warunek wykonujacy petle?

0

No mógłbyś, tylko po co? Masz przykład wyżej.

0

@kq:

Az mi glupio, ze rozwiazanie bylo tak banalne. Dziekuje - można zamknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1