输出与日志

控制台输出

Write / WriteLn

在 Pascal 中输出字符串,使用内置过程 WriteWriteLnWriteLn 会自动在末尾追加换行符。

这是 Pascal 中十分灵活的内置过程:支持传入任意数量、任意数据类型的参数,打印时会自动转为字符串;还支持特殊格式化语法,用于控制数值占位宽度、浮点数精度。

WriteLn('Hello world!');

// 输出整数表达式
WriteLn('You can output an integer: ', 3 * 4);

// 整数右对齐占位,总宽度10位
WriteLn('You can pad an integer: ', 666:10);

// 浮点数格式:总宽度1位,小数保留4位
WriteLn('You can output a float: ', Pi:1:4);Code language: Delphi (delphi)

手动换行

LineEnding 常量

如需在同一字符串内手动插入换行,使用 Free Pascal 标准库提供的 LineEnding 常量;Castle Game Engine 还封装了更简短的 NL 常量。

Pascal 字符串不解析反斜杠转义符\n 无效),以下写法是错误示范:

// 错误:\n不会被识别为换行
WriteLn('One line.\nSecond line.');Code language: JavaScript (javascript)

正确两种写法:

// 拼接换行常量
WriteLn('One line.' + LineEnding + 'Second line.');

// 分开两次 WriteLn(更简洁推荐)
WriteLn('One line.');
WriteLn('Second line.');Code language: JavaScript (javascript)

注意

仅控制台程序可用 WriteLn

Write/WriteLn 仅在控制台程序生效,主程序文件头部必须标注编译指令:

{$apptype CONSOLE}Code language: PHP (php)

不能写成 GUI 模式:

{$apptype GUI} // GUI程序直接调用WriteLn会报错Code language: PHP (php)
  • Unix/Linux/macOS:部分场景下 GUI 程序打印不会报错,但输出无意义;
  • Windows:GUI 图形程序直接执行 WriteLn 会触发运行错误。

Castle Game Engine 日志规范

使用 Castle Game Engine 开发时,禁止直接用 WriteLn 打印调试信息,改用专用日志接口:

  • WriteLnLog:普通调试日志
  • WriteLnWarning:警告日志

引擎会自动把日志分发到对应载体:

  1. Unix 系统:标准控制台输出 stdout;
  2. Windows GUI 游戏程序:写入本地日志文件;
  3. Android 平台:接入安卓系统日志,可通过 adb logcat 查看。

术语对照表

英文原文Pascal 中文释义
Write / WriteLn无换行输出 / 带换行输出
LineEnding系统换行常量(跨平台兼容)
NLCastle 简写换行常量
padding数值占位填充、对齐宽度
precision浮点数小数精度
{$apptype CONSOLE}控制台应用编译指令
{$apptype GUI}图形界面应用编译指令
adb logcatAndroid 日志查看工具
standard output标准输出流(stdout)

本节例子

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
{$R+}

begin
  
  WriteLn('Hello world!');

  // 输出整数表达式
  WriteLn('You can output an integer: ', 3 * 4);

  // 整数右对齐占位,总宽度10位
  WriteLn('You can pad an integer: ', 666:10);

  // 浮点数格式:总宽度1位,小数保留4位
  WriteLn('You can output a float: ', Pi:1:4);

  // 错误:\n不会被识别为换行
  // WriteLn('One line.\nSecond line.');

  // 拼接换行常量
  WriteLn('One line.' + LineEnding + 'Second line.');

  // 分开两次 WriteLn(更简洁推荐)
  WriteLn('One line.');
  WriteLn('Second line.');
    
end.Code language: PHP (php)

记得要有上面的这个编译指令才可以

Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注