被Pascal的“写”困惑

时间:2016-01-10 03:07:13

标签: delphi pascal

我了解到:  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}

然后我得到了我想要的结果。但我仍然不知道为什么这个问题可以通过这样的操作来解决。

1 个答案:

答案 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;是未声明的标识符。 恕我直言,这是一个编译错误。