我试图在Free Pascal IDE中使用“读取”过程而不是“ ReadLn”,但是当我在输入值后按Enter时,我得到一个新行,如“ readln”。...>
program test;
uses
crt;
var
AName: string[20];
function Complete_Rectangle(ALength_NewValue, ALength_Rectangle, ALength_Pref: byte): string;
const
Stars : string = '**';
var
Space_Str: string;
I,
Space_Needed : byte;
begin
Space_Needed := ALength_Rectangle - ALength_Pref; (* Calculate Needed Space.... *)
Space_Str := '';
for I:=1 to Space_Needed -(ALength_NewValue + 2) do (* 2 represent the length of Stars Constant *)
begin
Space_Str := Space_Str + ' ';
end;
Complete_Rectangle := Space_Str + Stars;
end;
begin
clrscr;
writeln('**********************************************************************');
writeln('** **');
write('** [*] add your Name here: '); read(AName); writeln(Complete_Rectangle(length(AName), 70, 28));
(* 70 represent the length of rectangle spaces and 28 represent the length of this prefix text "** [*] add your Name here: " *)
writeln('** **');
writeln('**********************************************************************');
readkey;
end.
是否可以创建自己的自定义阅读以解决上述问题? 我在这里有此代码,但似乎无法正常工作...:
procedure Lire(AVariant: Variant);
var
I: byte;
AKey: Char;
AReadStr: String;
begin
I := 1;
AReadStr := '';
AKey := char('');
repeat
AKey := ReadKey;
if not (AKey = #13) then
begin
AReadStr[I] := AKey;
write(AKey);
inc(I);
end;
Until AKey = #13;
case varType(AVariant) of
varString: begin AVariant := AReadStr; end;
varInteger: begin AVariant := StrToInt(AReadStr); end;
varByte: begin AVariant := StrToInt(AReadStr); end;
varBoolean: begin AVariant := StrToBool(AReadStr); end;
(* ..... and so on *)
end;
end;
答案 0 :(得分:1)
Read和Readln语句对于从键盘获取输入和从文件读取数据都是通用的。
关于文档的 Readln :
从文件F中读取一个或多个值,并将结果存储在V1中, V2等。之后,转到文件的下一行。
关于从文档中阅读:
从文件F中读取一个或多个值,并将结果存储在V1中, V2等
因此,从文件中读取时,readln会转到下一行,而read不会。但这不是控制台输入的预期行为。
如果您确实想将光标放在屏幕上,我建议您使用旧的getXY命令,该命令在FreePascal中也可用。 Link to gotoXY
例如:
write('** [*] add your Name here: ');
read(AName);
gotoXY(28 + length(AName)+ 1, WhereY-1); // Repositionate the cursor to the right Position.
writeln(Complete_Rectangle(length(AName), 70, 28));