控制台输出
Write / WriteLn
在 Pascal 中输出字符串,使用内置过程 Write 或 WriteLn;WriteLn 会自动在末尾追加换行符。
这是 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:警告日志
引擎会自动把日志分发到对应载体:
- Unix 系统:标准控制台输出 stdout;
- Windows GUI 游戏程序:写入本地日志文件;
- Android 平台:接入安卓系统日志,可通过
adb logcat查看。
术语对照表
| 英文原文 | Pascal 中文释义 |
|---|---|
| Write / WriteLn | 无换行输出 / 带换行输出 |
| LineEnding | 系统换行常量(跨平台兼容) |
| NL | Castle 简写换行常量 |
| padding | 数值占位填充、对齐宽度 |
| precision | 浮点数小数精度 |
| {$apptype CONSOLE} | 控制台应用编译指令 |
| {$apptype GUI} | 图形界面应用编译指令 |
| adb logcat | Android 日志查看工具 |
| 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)


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