To máš celé nějaké zmatené:
-
z funkce klavesnice_cteni se Ti to nikdy nevrátí, ty příkazy “break” platí jen pro přerušení větví switche
-
Voláš s nekonečnou rekurzí funkce posun_radku/zakmit s klavesnice_cteni, takže po pár průchodech se Ti zahltí stack a program se zblázní
-
“osetreno” nemá vlastně žádný význam, to nemáš dobře promyšlené. V jednom okamžiku přečteš a zobrazíš klávesu, hned to zas smažeš, počkáš 20 ms a znovu testuješ - to není ošetření zákmitů, díky tomu vidíš trvale že nic nebylo stisknuto
Možná jsi zvyklý z BASICu nebo assembleru že se skáče na labely. Ale funkce v C jsou podprogramy do kterých se vleze (uloží se návratová adresa do zásobníku) a ze kterých se to po ukončení vrátí (obnoví se ze zásobníku původní adresa programu).