コンソールの入力、出力、およびフォーマット

print、println、input文とプレースホルダーの規則を説明します。

Wave Foundation

入出力文

Waveはprint、println、inputをコンソール入出力文として提供します。

fun main() {
    var count: i32 = 0;
    input("{}", count);
    print("count = ");
    println("{}", count);
}

各文は;で終わります。最初の引数は文字列リテラルでなければなりません。変数または計算した文字列をformat引数として使用することはできません。

プレースホルダー

正確に2文字の{}のみプレースホルダーです。

println("name = {}, score = {}", name, score);

プレースホルダの数と次の式の数はまったく同じでなければなりません。数が異なると文法エラーです。

println("{} {}", one);
// 오류: 자리표시자 2개, 값 1개
println("plain text", one);
// 오류: 자리표시자 없음, 값이 남음

他の形式の中かっこはプレーンテキストのままです。この文法には名前や番号の付いたプレースホルダはありません。

printとprintln

printはフォーマットしたテキストをそのまま出力し、printlnは改行を付け加えます。

print("loading...");
println("done");

フォーマット引数には、整数、浮動小数点、文字列、ポインタなどのスカラー値を使用します。配列と構造体はフォーマット引数として使用できません。

input対象

inputは読み取った値をターゲットに格納するため、formatの後の式はすべて書き込み可能な位置にする必要があります。

var number: i32 = 0;
input("{}", number);

変数、フィールド、および逆参照した保存場所をターゲットとして使用できます。リテラルと計算結果は入力先として使用できません。

入力値を要求されたタイプにすべて変換できない場合、プログラムは失敗状態で終了します。

ランタイム境界

これらの文は、hosted環境のコンソール入出力を使用します。プリスタンディング環境では、カーネルまたはデバイスが提供する入出力を関数またはFFI境界として定義する必要があります。

入力値と範囲

bool入力は0と1のみ許可します。 2をtrueと解釈するか、trueという文字列を同じ入力として受け取りません。整数入力は、ターゲット整数幅の範囲内になければなりません。 128・256・512・1024ビット整数度タイプの全幅を基準に処理します。

フォーマットエラー、範囲超過、必要な入力前EOFは失敗です。組み込みinputは、失敗を返して再入力する関数ではなく、プロセスを失敗終了させる入力機能です。リカバリ可能な入力処理が必要な場合は、ioでバイトを読み込み、別のパーサーを構成します。

入力電卓の練習 · ファイルとio