0Pricing
Go Academy · レッスン

入力のスキャン

書式付き入力を読み取ります

「入力のスキャン」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

fmtで入力を読み取る

fmtパッケージは、値を出力するだけでなく読み取ることもできます。スキャン関数はテキストを解析して、型付きの変数に格納します。

これらは出力関数の反対の役割を果たします。

package main

import "fmt"

func main() {
    var n int
    fmt.Sscan("42", &n)
    fmt.Println(n + 1)
}

ポインタが必要

スキャン関数は結果を格納する必要があるため、各変数のアドレスを&で渡します。

&を付け忘れることは、スキャンで最もよくあるバグです。

package main

import "fmt"

func main() {
    var a, b int
    fmt.Sscan("3 4", &a, &b)
    fmt.Println(a + b)
}

Sscanは空白で分割する

fmt.Sscanは、文字列から空白で区切られた値を複数の変数に読み込みます。各ポインタから型を判断します。

package main

import "fmt"

func main() {
    var name string
    var age int
    fmt.Sscan("Ada 36", &name, &age)
    fmt.Println(name, age)
}

Sscanfはフォーマットを使用する

fmt.Sscanfは、Printfを逆向きにしたように、フォーマット文字列に従って解析します。フォーマット内のリテラル文字は、入力と一致していなければなりません。

package main

import "fmt"

func main() {
    var h, m int
    fmt.Sscanf("09:05", "%d:%d", &h, &m)
    fmt.Println(h, m)
}

読み取った数を確認する

スキャン関数は、正常に解析された項目の数とエラーを返します。解析が完全に成功したかどうかを確認するには、この数を調べます。

package main

import "fmt"

func main() {
    var a, b int
    count, _ := fmt.Sscan("7", &a, &b)
    fmt.Println("parsed:", count)
}

解析エラーを処理する

入力が期待される型と一致しない場合は、エラーが返されます。実際の入力を扱う場合は、必ずエラーを確認してください。

package main

import "fmt"

func main() {
    var n int
    _, err := fmt.Sscan("notanumber", &n)
    if err != nil {
        fmt.Println("error:", err)
    }
}

異なる型を解析する

1回の呼び出しで、複数の異なる型を読み取れます。各ポインタの型によって、そのトークンの解析方法が決まります。

package main

import "fmt"

func main() {
    var word string
    var price float64
    var ok bool
    fmt.Sscan("apple 1.50 true", &word, &price, &ok)
    fmt.Println(word, price, ok)
}

リテラルテキストを含むSscanf

Sscanfは、句読点で数値を区切る座標やキーと値のペアなど、形式が固定された入力に適しています。

package main

import "fmt"

func main() {
    var x, y int
    fmt.Sscanf("(3,8)", "(%d,%d)", &x, &y)
    fmt.Println(x, y)
}

浮動小数点数を読み取る

Sscanfでは%fを、Sscanでは*float64を使って、10進数を読み取ります。

package main

import "fmt"

func main() {
    var temp float64
    fmt.Sscanf("21.5C", "%fC", &temp)
    fmt.Println(temp)
}

Scanと標準入力

fmt.Scanとfmt.Scanfは、Sscanが文字列から読み取るのと同じ方法で、標準入力から読み取ります。解析規則は同じで、異なるのは入力元だけです。

package main

import "fmt"

func main() {
    line := "100 200"
    var a, b int
    fmt.Sscan(line, &a, &b)
    fmt.Println(a * b)
}

小さなパーサー

スキャンと計算を組み合わせて、レコードを解析し、結果を生成します。

package main

import "fmt"

func main() {
    var name string
    var qty int
    var unit float64
    fmt.Sscanf("pen 3 1.25", "%s %d %f", &name, &qty, &unit)
    fmt.Printf("%s total: $%.2f\n", name, float64(qty)*unit)
}

確認問題

結果を格納するために、スキャン関数へ何を渡す必要がありますか。

まとめ:入力のスキャン

フォーマットされた入力を読み取る方法を学びました。

  • Sscanは空白で分割し、Sscanfはフォーマット文字列に従います。
  • 各格納先には、&を付けたポインタを渡します。
  • 不正な入力を検出するため、返された数とエラーを確認します。
package main

import "fmt"

func main() {
    var d, mo, y int
    fmt.Sscanf("30/05/2026", "%d/%d/%d", &d, &mo, &y)
    fmt.Println(y, mo, d)
}

よくある質問

「入力のスキャン」レッスンは無料ですか?

はい。「入力のスキャン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「入力のスキャン」で何を学びますか?

書式付き入力を読み取ります ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「入力のスキャン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Printfの動詞
  2. SprintfとFprintf
  3. Stringerインターフェース
  4. 入力のスキャン
← Go Academyに戻る