Instrukcja warunkowa po wpisaniu litery robi się nieskończoną pętlą - jak temu zaradzić?

0

Kod programu jest taki:

#include <iostream>
#include <stdio.h>
#include "../gazeta.h"

using namespace std;

int funkcjaPytajaca();

int main()
{

funkcjaPytajaca();

}

int funkcjaPytajaca(){
    int wybor;

    cout << "Witaj w programie zarzadzania Gazeta" << endl;
    cout << "Wybierz:" << endl;
    cout << "1 aby wyswietlic aktualny stan obiektu" << endl;
    cout << "2 aby zmienic parametr obiektu" << endl;
    cout << "3 aby zakonczyc program" << endl;

    cin >> wybor;
    if (wybor == 1)
        cout << "1" << endl;
    else if(wybor == 2)
        cout << "2" << endl;
    else if(wybor == 3)
        cout << "3" << endl;
    else
        funkcjaPytajaca();

    return wybor;
}

Moim ukrytym marzeniem jest, aby po wpisaniu czegokolwiek innego niż cyfry 1, 2 lub 3 pytanie pojawiało się ponownie. Niestety, po podaniu litery program wpada w nieskończoną pętlę. Co robię źle?

0

A mógłbym jeszcze prosić o podpowiedź jak to zgrabnie napisać? Przy tak sformułowanym kodzie:

while(!(cin>>wybor)) //dopóki strumień jest w stanie błędu -> dopóki podawane są błędne dane
    {
      cin.clear(); //kasowanie flagi błędu strumienia
      cin.sync(); //kasowanie zbędnych znaków z bufora
    }

    if (wybor == 1)
        cout << "1" << endl;
    else if(wybor == 2)
        cout << "2" << endl;
    else if(wybor == 3)
        cout << "3" << endl;
    else
        funkcjaPytajaca();

    return wybor;

i podaniu litery, program nie wyświetla ponownie pytania, tylko pustą linię. Zaś jeśli dodam wywołania funkcji do pętli, to liczbę trzeba podać dwa razy. Jest możliwe, żeby niezależnie od danej wejściowej, funkcja reagowała tylko na 1, 2 lub 3, a przy podaniu czegokolwiek innego po prostu ponawiała pytanie?

1
while(!(cin>>number)) {
  cin.clear(); cin.sync();
  cout << "Wprowadziles niepoprawna liczbe, podaj ja jeszcze raz:";
}

switch(number) {
  // ...
}

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