Generalnie musisz się zdecydować na którąś z dróg. Jak zabezpieczasz się w pętli przed złymi danymi, to nie ma co sprawdzać tego ponownie parę linijek niżej (no chyba, że zabezpieczamy się przed jakimiś błędami, ale wtedy to już inna bajka). Ja bym ten komunikat o złych danych dał właśnie do pętli. Poza tym cały ten kod ma trochę nieścisłości (zwłaszcza zważywszy na treść zadania). Moja wersja wygląda tak:
Kod: Zaznacz cały
#include <iostream>
using namespace std;
enum wzor {bez, rododendron, sosna, fiolek, czekolada};
wzor podloga[20][15]; // tablica musi być globalna, żeby funkcja mogła ją zmieniać
int menu()
{
int tmp;
cout << "1 Bez" << endl;
cout << "2 Rododendron" << endl;
cout << "3 Sosna" << endl;
cout << "4 Fiolek" << endl;
cout << "5 Czekolada" << endl;
cout << "Twoj wybor: ";
cin >> tmp;
return tmp;
}
void tlo(wzor pattern)
{
// wypełnianie tablicy
}
int main(int argc, char *argv[])
{
int akcja = menu();
while (akcja < 1 | akcja > 5) // pętla zabezpieczająca przed wpisaniem niepoprawnych danych
{
cout << endl << "Zly wybor liczba nie zawiera sie w [1,5]" << endl;
akcja = menu();
}
switch (akcja)
{
case 1:
cout << "Wybrano Bez" << endl;
tlo(bez);
break;
case 2:
cout << "Wybrano Rododendron" << endl;
tlo(rododendron);
break;
case 3:
cout << "Wybrano Sosna" << endl;
tlo(sosna);
break;
case 4:
cout << "Wybrano Fiolek" << endl;
tlo(fiolek);
break;
case 5:
cout << "Wybrano Czekolada" << endl;
tlo(czekolada);
break;
default:
cout << "Błąd!" << endl; // nie powinno tu dojść, bo pętla wyżej ma temu zapobiec
break;
}
return 0;
}