Chciałbym napisać pewien program. Nie zagłębiajmy się w jego funkcje, bo to nie ma sensu. Najważniejsze jest to, że po wyborze niepoprawnej opcji, program powtarza 2 linijki tekstu w nieskończoność, nie zatrzymując się po to, aby użytkownik mógł wpisać znak (zmiana wartości zmiennej, która informuje która opcja z menu została wybrana).
#include <conio.h>
#include <std_lib_facilities.h>
#include <string.h>
int cykl2= 0;
int cykl = 0; //odpowiada za to, który raz zostanie wyświetlony komunikat informujący i proszący o wpisanie liczby
void main ()
{
int wybor1; //definiuje zmienną wybor1, która odpowiada za liczbę która zostanie wybrana w menu
system ("chcp 1250"); //polskie znaki
if (cykl == 0)//sprawdza który raz została wywołana funkcja "main"
{
cout << "Witaj w programie XYZ.\n";
cout << "Wybierz tryb (wpisz tylko liczbę):\n";
cout << "1. Automatyczne dopasowywanie\n";
cout << "2. Wyszukiwanie informacji\n";
cout << "Wybieram: "; //wyświetla początkowe informacje, prosi o wybranie trybu
cin >> wybor1; //mamy możliwość wpisania liczby, przekazywana jest ona do zmiennej
cykl++; //zwiększa wartość zmiennej cykl
switch (wybor1) //wykonuje instrukcje zależnie od wyboru
{
case 1: dopasowywanie(); break; //przeskakuje do dopasowywania
case 2: wyszukiwanie(); break; //przeskakuje do wyszukiwania
default: main(); break; //niepoprawna opcja, przeskakuje do main
}
}
if (cykl > 0) //jako, że podczas pierwszego wyświetlenia zwiększyliśmy wartość zmiennej cykl, teraz program przechodzi tu
{
if (cykl2 < 10) //jeżeli cykl2 jest mniejszy od 10 (czyli nie wystąpił błąd) prosi o wpisanie znaku
{
cykl2++; //zwiększa wartość cykl2, dzięki temu można przerwać program po określonej ilości cyklów
cout << "Niepoprawna opcja!\n";
cout << "Wybierz ponownie tryb: "; //drukuje w konsoli niepoprawności opcji, prosi o ponowne wybranie trybu
cin >> wybor1; //przekazuje wartość do wybor1
//początkowo był "switch", ale pomyślałem, że to może coś rozwalać, więc dałem "if"... żadnego efektu
if (wybor1 == 1) //jeżeli wybrano pierwszą opcję
{
dopasowywanie();
}
if (wybor1 == 2) //jeżeli wybrano drugą
{
wyszukiwanie();
}
if (wybor1 != 1 && wybor1 != 2) //jeżeli wybrana opcja jest różna od 1 i 2
{
main(); //powtarza prośbę o wpisanie opcji
}
}
else //jeżeli cykl2 wynosi więcej niż 10, czyli wystąpił błąd, po prostu go sygnalizuje
{
cout << "\n";
cout << "____________________________________________\n";
cout << "BŁĄD!!!!";
getch();
}
}
}
Wiem, że wpisanie znaku lub ciągu znaków do zmiennej liczbowej nie jest mądre, aczkolwiek milej by było, gdyby po zrobieniu czegoś takiego cały program nie zaczynał wariować, tylko po prostu prosił o ponowne wpisanie.