Gdzieś musi być błąd u mnie w jakimś drobiazgu. Bez cin.clear() oraz bez cin.sync() program się nie zatrzymuje i pętla się robi nieskończona. Główkuje na tym od kilku dni i już na prawdę nie wiem.
#include "stdafx.h"
#include <iostream>
using namespace std;
int menu();
void DoTaskOne();
void DoTaskMany(int);
bool GetChoice(int *ret, int count);
int main()
{
char znak=0;
bool exit = false;
do {
int choice;
do {
menu();
} while (!GetChoice(&choice, 5));
switch (choice)
{
case (1):
DoTaskOne();
break;
case (2):
DoTaskMany(2);
break;
case (3):
DoTaskMany(3);
break;
case (4):
continue;
break;
case (5):
exit=true;
break;
}
}
while (!exit);
return 0;
}
int menu()
{
int choice;
cout <<"Menu;-)))"<<endl;
cout <<" 1 opcja"<<endl;
cout <<"2 opcja"<<endl;
cout <<"3 opcja"<<endl;
cout <<"Ponownie wyswietl menu"<<endl;
cout <<"wyjscie"<<endl;
cout <<": "<<endl;
cin >> choice;
return choice;
}
void DoTaskOne()
{
cout <<"opcja pierwsza"<<endl;
}
void DoTaskMany(int which)
{
if (which==2)
cout <<"opcja druga"<<endl;
else cout <<"opcja trzecia"<<endl;
}
bool GetChoice(int *ret, int count)
{
cin.clear();
cin.sync();
string line;
getline(cin, line);
bool is_num = istringstream(line) >> *ret;
is_num = is_num && *ret >= 1 && *ret <= count;
if (!is_num) cout <<"nie moze byc ani litera ani liczba z poza 1-5 \n";
return is_num;
}