Program zapętla się, gdy przy wywołaniu funkcji idz_do_elementu jako numer elementu podamy literę zamiast liczby.
Program zapętla się też, gdy w menu poda się kilka znaków, tak że jeden z nich wywołuje opcję korzystającą z funkcji idz_do_elementu, a następny po nim jest literą
Czyli:
- wpisujemy "uio" (żadna z liter nie wywołuje opcji dostępnej w menu) - dostajemy komunikat "Nie trafiłeś w klawisz"
- wpisujemy "uso" ("s" wywołuje "Szukaj elementu po jego wartości", czyli funkcję, która jako argumentu potrzebuje stringa, nie int, oraz nie korzysta z funkcji idz_do_elementu)
- wpisujemy "upo" ("p" prowadzi do opcji "Wyświetl pojedynczy element", która potrzebuje int jako argumentu i korzysta z funkcji idz_do_elementu; po "p" jest jeszcze jedna litera) - program zapętla się i w nieskończoność wyświetla menu;
Dodałem dla debugowania wyświetlanie wprowadzonej wartości (numer elementu) w funkcji "Wyświetl pojedynczy element". Widać, że podczas zapętlenia menu wartość wprowadzana jako argument liczbowy dla funkcji nadal tkwi w pamięci programu niezmieniona (czyli litera nie wskakuje do tej wartości i nie zastępuje int)
Przy zapętleniu menu wywołuje się ciągle ostatnio wybrana opcja (w tym wypadku "p") z ostatnim podanym numerem elementu. Czyli jeśli wcześniej oglądaliśmy element nr 3 a potem wpisaliśmy "upo", to program zapętla się pokazując w kółko wartość 3 elementu.
Z tego wynika, że to nie jest wyłącznie błąd działania funkcji idz_do_elementu (przynajmniej tak mi się wydaje), lecz także coś z funkcją odpowiedzialną za menu. Co dziwne przy zapętleniu program nie czeka na wprowadzenie opcji z klawiatury przez użytkownika. Tak jakby cały czas dostawał "p" do zmiennej wyborI.
Skoro dostaje cały czas "p", to znaczy, że ignoruje "o", które jest po nim. Nie modyfikuje też wartości numeru elementu (zmienna "numer"), czyli tam "o" też nie ląduje (mogłoby zostać przekształcone przez program na liczbę i wstawione do zmiennej).
Nie mam pomysłu, dlaczego tak jest.
Dobra, sprowadzając to do jednego zdania: wystarczy pewnie, jeśli idz_do_elementu nie pozwoli na przekazanie sobie argumentu, który nie jest int-em