輸出與日誌

控制台輸出

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: JavaScript (javascript)

手動換行

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)

不可設定為圖形介面模式:

{$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 平台:整合 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:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *