[PASCAL] Jeden znak jako wartość ReadLN


(kostek135) #1

Chodzi mianowicie o to, że ReadLN przyjmuje typ zmiennej char. Co zrobić, aby można było w niego wpisać tylko jedną literę (znak)? Ma to działać na zasadzie, że nowa litera zastępuje poprzednią albo trzeba tę pierwszą wykasować (backspace) aby móc wpisać drugą.


(Krzkaczor) #2

readkey i wszystko jasne :wink:


(kostek135) #3

Możesz napisać coś więcej, bo mi chodzi o coś takiego jak jest w biosie. Kiedy pyta się o to czy zapisać ustawienia. Jeśli wybierzesz 'n', a potem 'y' to y jakby zastępuje n (nie pojawia się obok tylko na miejscu n). Nie za bardzo wiem jak readkey wykorzystać do tego.


(Przemo822) #4

A spróbuj wykorzystać to:


(kostek135) #5

Ten efekt może być, tylko ze jest to mocno nie dopracowane. Wiem już co i jak, to sobie zrobię thx.


(B Brachaczek) #6

Lenie z was... :stuck_out_tongue:

{żeby było ładnie, wsadzić do uniwersalnej procedury z obsługą dowolnej liczby tolerowanych znaków przekazywanych jako argument (tablica?) i klawisza , który powodowałby przypisanie do zmiennej np. #0}

PROGRAM DajZnak;


USES

	CRT; {ReadKey}


VAR

	znak, temp : Char;


BEGIN

	Write('Wprowadź Y lub N: ');

	REPEAT {dopóki nie dostaniemy (#13), wczytujemy}

		REPEAT {wczytujemy z klawiatury dopóki nie dostaniemy tego co chcemy lub (#13)}

			temp := ReadKey;

			temp := UpCase(temp); {jeśli dostaliśmy małą literę, zmieniamy ją na dużą, co by nie komplikować później kodu}

			IF (temp = 'Y') OR (temp = 'N') THEN znak := temp; {zapamiętujemy wartość zmiennej tymczasowej, jeśli to y lub n - bez tego finalna wartość zmiennej zawsze będzie #13}

		UNTIL (temp = 'Y') OR (temp = 'N') OR (temp = #13);

		Write(znak,#8); {jeśli pętla się skończyła, czyli dostaliśmy coś fajnego, wypisujemy to i cofamy sie o znak do tyłu (#8 to Backspace)}

	UNTIL temp = #13;


	WriteLn;

	WriteLn('Wprowadzono ',znak);

END.

Kompilowane Free Pascalem działa znośnie.