Obsluga strumienia wejsciowego

Obsluga strumienia wejsciowego
W1
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 6 lat
  • Postów:22
0

Kod napisany tylko i wylacznie na potrzeby zilustrowania problemu.

Kopiuj
#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?

edytowany 1x, ostatnio: wld1337
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
2
Kopiuj
    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.


W1
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 6 lat
  • Postów:22
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.

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
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.

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

edytowany 1x, ostatnio: kq
W1
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 6 lat
  • Postów:22
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
0

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


W1
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 6 lat
  • Postów:22
0

@kq:

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

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.