C++ złe działanie programu

0

Dzień dobry

Napisałem sobie taki program:

#include <iostream>
#include <conio.h>
#include <windows.h>

using namespace std;

int czyparzysta(int liczba)
{
    if (liczba % 2 == 0)
        cout<<"Liczba "<<liczba<<" jest parzysta"<<endl;
    else
        cout<<"Liczba "<<liczba<<" jest nieparzysta"<<endl;
}

int main()
{
    for(;;)
    {
        a:
    int liczba;
    cout<<"Podaj liczbe:"<<endl;
    cin>>liczba;

    while(!(cin>>liczba))
    {
    cin.clear();
    cin.sync();
    cout<<"Wartosc nie jest poprawna!"<<endl;
    getch();
    system("cls");
    goto a;
    }

    czyparzysta(liczba);

    getch();
    system("cls");
    }
    return 0;
}

Działał on poprawnie do momentu, w którym dopisałem linijki

while(!(cin>>liczba))
    {
    cin.clear();
    cin.sync();
    cout<<"Wartosc nie jest poprawna!"<<endl;
    getch();
    system("cls");
    goto a;
    } 

Gdy podaje liczbe albo litere, nic się nie dzieje i dopiero za 2 razem podaje czy liczba jest parzysta. Próbowałem usuwać getch(); w niektórych miejscach albo zmieniać jego miejsce, ale w żadnym przypadku nie działa to dobrze. Ktoś ma pomysł co tu może być źle?

1

W pętli while też wczytujesz liczbe. Więc wywal warunek z while :P

0

Ło matko, nie używaj goto jest ogólnie fe, a w twoim przypadku generuje błąd.
Już dziś to wstawiałem, ale co mi tam.
Przeskakujesz do etykiety a w wyniku czego wykonuje się

  • cin>>liczba;
  • while(!(cin>>liczba)) następny cin
  • getch(); i getch do tego
    Wczytaj liczbe tak, to w miare niezawodny sposób
 
int wczytajLiczbe(const char *pytanie, const char *wiadomosc_jak_sie_nie_uda)
{
    int number = 0;
    while((std::cout << pytanie) && !(std::cin >> number))
    {
        std::cout << wiadomosc_jak_sie_nie_uda;
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    return number;
}

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