Miért nem működik ez a Pascal program?
Egy olyan programról van szó, amely egy stringet egy megadott kulcs alapján lekódol. A forráskód:
program coding;
uses crt;
var mask,c:char;
szoveg,k_szoveg:string;
i:integer;
begin
clrscr;
write('A kulcs (1 karakter): ');
readln(mask);
repeat
writeln;
writeln('Ird be a szoveget (max. 255 karakter)! ');
readln(szoveg);
for i:=1 to length(szoveg) do k_szoveg[i]:=chr(ord(szoveg[i] xor ord(mask));
writeln('A szoveg kodolva: ',k_szoveg);
writeln('Kilepes: ESC, restart: egy karakter.');
writeln;
c:=readkey;
until c=#27;
writeln('Nyomj meg egy gombot!');
repeat until keypressed;
end.
A kód lefordul és le is fut, de nem ír ki semmilyen lekódolt szöveget. Pedig működnie kellene az ismereteim alapján. Mi lehet a hiba oka és hogyan tudnám kiküszöbölni? (Kezdő programozó vagyok, Pascal-ban és C++ -ban írok programokat. A jövőben komolyan szeretnék foglalkozni programozással.)
A válaszokat előre is köszi!
A programod valószínűleg működik, de a karakterek, amelyek a kódolás után a stringbe kerülnek olyanok, amelyeket nem tud a képernyőn megjeleníteni. Írd ki egy fájlba és ott vissza tudod ellenőrizni. Pl hexa editorral megnyitva a fájlt, láthatod a benne levő karakterek kódját.
Fájlbaírással: A teszt.dat-ban lesz a kódolt szöveg. A Totalcommander nézőkéjével meg nézz rá hexában
program project1;
{$mode tp}
uses crt;
var mask,c:char;
szoveg,k_szoveg:string;
i:integer;
f: file of char;
begin
clrscr;
write('A kulcs (1 karakter): ');
readln(mask);
assign(f,'teszt.dat');
rewrite(f,1);
repeat
writeln;
writeln('Ird be a szoveget (max. 255 karakter)! ');
readln(szoveg);
for i:=1 to length(szoveg) do
begin
c:=chr(ord(szoveg[i]) xor ord(mask));
write(f,c);
k_szoveg[i]:=c;
end;
writeln('A szoveg kodolva: ',k_szoveg);
writeln('Kilepes: ESC, restart: egy karakter.');
writeln;
c:=readkey;
until c=#27;
writeln('Nyomj meg egy gombot!');
close(f);
repeat until keypressed;
end.
"Rég pascaloztam, de biztos, hogy char típusú változót readln-nel akarsz beolvasni? Szerintem az sima read."
Minden gond és probléma nélkül lehet readln-el beolvasni char típusú változóba adatot.
A read és a readln között annyi a különbség hogy a read olvasás után nem rakja új sor elejére a kurzort, a readln meg igen.
#1, köszi a választ! :)
Csak hogy pontosítsuk ezt a Read/Readln kérdést.
Idézet az Együtt könnyebb a Programozás: Free Pascal (szerzők Benkő Tiborné, Tóth Bertalan) című könyvből:
"A read eljárás az adatbeviteli sorból csak a paraméterei számára szükséges adatokat dolgozza fel, míg a fel nem használt rész egy következő read/readln eljárás számára elérhető marad.
Ezzel szemben a readln eljárás beolvassa a teljes adatsort, a bevitelt záró enter billentyűnek megfelelő karakterekkel együtt, és ezt követően ad értéket a paraméterként megadott változóknak. Amennyiben minden paraméter értéket kapott, a beolvasott sor további része elvész."
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!