被 Pascal 的 'write' 搞糊涂了
Confused by the 'write' of Pascal
我了解到:
write('test');
将在屏幕上打印 "test",
而
program testpro;
var
outfile:Text;
begin
assign(outfile, 'outfile.txt');
rewrite(outfile);
write(outfile, 'test');
end;
将 "test" 写入文件 outfile.txt。
下面的代码尝试执行将字符打印到屏幕和将字符写入文件的操作。
program doboth(input, output)
begin
assign(input, 'infile.txt');
assign(output, 'outfile.txt');
reset(input);
rewrite(output);
procedure getcharfrominput;
begin
{procedure to read char one by one from infile and write the read char}
{ to out file and print on the screen in the same time}
...
write(ch); {ch is expected to be printed on the screen}
write(output, ch); {ch is expected to be wrote to the outfile.txt}
...
end;{procedure getcharfrominput}
begin
getcharfrominput;
end;{program doboth}
但结果是读取的char被写入outfile.txt两次而屏幕没有任何输出(这意味着write(ch);
也将char写入文件而不是屏幕);
然后我更改 'input' 和 'output' 变量的声明并获得以下代码:
program doboth; {remove input output}
var input, output:text; {declare input and output here}
begin {the rest of the code is the same}
assign(input, 'infile.txt');
assign(output, 'outfile.txt');
reset(input);
rewrite(output);
procedure getcharfrominput;
begin
{procedure to read char one by one from infile and write the read char}
{ to out file and print on the screen in the same time}
...
write(ch); {ch is expected to be printed on the screen}
write(output, ch); {ch is expected to be wrote to the outfile.txt}
...
end;{procedure getcharfrominput}
begin
getcharfrominput;
end;{program doboth}
然后我得到的结果是want.But我还是不知道为什么这样操作就可以解决这个问题
前段时间,程序习惯于从键盘获取输入并将输出写入控制台(文本屏幕)或文本文件。
主程序的参数输入和输出使这一点变得明确,并提供了一种 'redirect' 输入和输出的方法。
IE。您可以将文本文件与输入 and/or 输出相关联。就像Ianx86在他的程序中所做的那样。
所以,
Readln(ch) 从输入中读取。
Writeln(ch) 写入输出。
现在,如果您将输出与文本文件相关联('redirect'),
Writeln(ch) 和 Writeln(output, ch) 变得相同,即
Writeln(ch) 不再写入控制台,而是写入文本文件。
备注:
有人提到作为主程序参数的(输入,输出)被忽略了。
这似乎是正确的。
如果将其替换为 (inp, outp),
"input" 和 "output" 仍然可以用作全局变量,而 "inp" 和 "outp" 是未声明的标识符。
恕我直言,这是一个编译器错误。
我了解到:
write('test');
将在屏幕上打印 "test",
而
program testpro;
var
outfile:Text;
begin
assign(outfile, 'outfile.txt');
rewrite(outfile);
write(outfile, 'test');
end;
将 "test" 写入文件 outfile.txt。
下面的代码尝试执行将字符打印到屏幕和将字符写入文件的操作。
program doboth(input, output)
begin
assign(input, 'infile.txt');
assign(output, 'outfile.txt');
reset(input);
rewrite(output);
procedure getcharfrominput;
begin
{procedure to read char one by one from infile and write the read char}
{ to out file and print on the screen in the same time}
...
write(ch); {ch is expected to be printed on the screen}
write(output, ch); {ch is expected to be wrote to the outfile.txt}
...
end;{procedure getcharfrominput}
begin
getcharfrominput;
end;{program doboth}
但结果是读取的char被写入outfile.txt两次而屏幕没有任何输出(这意味着write(ch);
也将char写入文件而不是屏幕);
然后我更改 'input' 和 'output' 变量的声明并获得以下代码:
program doboth; {remove input output}
var input, output:text; {declare input and output here}
begin {the rest of the code is the same}
assign(input, 'infile.txt');
assign(output, 'outfile.txt');
reset(input);
rewrite(output);
procedure getcharfrominput;
begin
{procedure to read char one by one from infile and write the read char}
{ to out file and print on the screen in the same time}
...
write(ch); {ch is expected to be printed on the screen}
write(output, ch); {ch is expected to be wrote to the outfile.txt}
...
end;{procedure getcharfrominput}
begin
getcharfrominput;
end;{program doboth}
然后我得到的结果是want.But我还是不知道为什么这样操作就可以解决这个问题
前段时间,程序习惯于从键盘获取输入并将输出写入控制台(文本屏幕)或文本文件。 主程序的参数输入和输出使这一点变得明确,并提供了一种 'redirect' 输入和输出的方法。 IE。您可以将文本文件与输入 and/or 输出相关联。就像Ianx86在他的程序中所做的那样。
所以, Readln(ch) 从输入中读取。 Writeln(ch) 写入输出。
现在,如果您将输出与文本文件相关联('redirect'), Writeln(ch) 和 Writeln(output, ch) 变得相同,即 Writeln(ch) 不再写入控制台,而是写入文本文件。
备注:
有人提到作为主程序参数的(输入,输出)被忽略了。 这似乎是正确的。 如果将其替换为 (inp, outp), "input" 和 "output" 仍然可以用作全局变量,而 "inp" 和 "outp" 是未声明的标识符。 恕我直言,这是一个编译器错误。