Mi lehet a probléma? (Pascal)
A feladat: Kérjünk be karaktereket ESC végjelig, majd jelenítsük meg a beírtakat, majd a nem beírtakat. Minden betűt csak egyszer írjunk ki, ne különböztessünk meg nagy- és kisbetűt.
Eddig eljutottam:
program asd;
uses crt;
var
betuk: set of 'A'..'Z';
kar: char;
Begin
clrscr;
betuk:=[];
while kar <> #27 do begin
readln(kar);
kar:=upcase(kar);
if kar in ['A'..'Z'] then
betuk:=betuk+[kar];
end;
write('beirt betuk: ');
for kar:='A' to 'Z' do begin
if kar in betuk then
write(kar);
end;
writeln;
write('nem beirt betuk: ');
for kar:='A' to 'Z' do begin
if not(kar in betuk) then write(kar);
end;
readln;
end.
A baj az, hogy egyszerűen nem lesz vége a beolvasásnak ESC leütésekor. Kipróbáltam egyes betűk esetén ilyen formában: while kar<>'L' do...így működik, de ASCII kódokkal sehogysem akar, sőt, még CTRL+BREAK-kel sem lép ki. Előre is köszi.
Szia.
Ide a readln-s beolvasás nem jó. mivel as ESC karakter a nem nyomtatható ( igy nem megjelenithető) tartományban van az ASCII kódtáblában ( [link] - első öszlop ).
Ebből következik, hogy keypressed illetve readkey függvények használastával kellene megoldani a feladatot.
pl igy :
while kar <> #27 do begin
if keypressed then begin
Kar:=readkey ;
if Kar=#0 then begin { Specialis karakterek }
Kar:=readkey;
Kar:=#0;
end ;
kar:=upcase(kar);
writeln (kar);
if kar in ['A'..'Z'] then
betuk:=betuk+[kar];
end ;
end;
Sok sikert.
üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!