我了解到:
write('test');
将在屏幕上打印“test”,
而
program testpro;
var
outfile:Text;
begin
assign(outfile, 'outfile.txt');
rewrite(outfile);
write(outfile, 'test');
end;
将“test”写入文件outfile.txt。
下面的代码尝试将printinng char操作到屏幕并将char写入文件。
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}
但结果是read char被写入outfile.txt两次,而屏幕没有任何输出(这意味着write(ch);
也将char写入文件而不是屏幕); < / p>
然后我更改'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}
然后我得到了我想要的结果。但我仍然不知道为什么这个问题可以通过这样的操作来解决。
答案 0 :(得分:4)
前段时间,程序用于从键盘获取输入并将其输出写入控制台(文本屏幕)或文本文件。 主程序的参数输入和输出明确地提供了一种方法来重定向&#39;输入和输出。 即您可以将文本文件与输入和/或输出相关联。就像Ianx86在他的节目中所做的那样。
所以, Readln(ch)从输入读取。 Writeln(ch)写入输出。
现在,如果您将输出与文本文件相关联(&#39;重定向&#39;它), Writeln(ch)和Writeln(输出,ch)变得相同,即 Writeln(ch)不再写入控制台,而是写入文本文件。
注:
有人提到(输入,输出)作为主程序的参数被忽略了。 这似乎是正确的。 如果用(inp,outp)替换它, &#34;输入&#34;和&#34;输出&#34;仍然可以用作全局变量,&#34; inp&#34;和&#34; outp&#34;是未声明的标识符。 恕我直言,这是一个编译错误。