入力のスキャン
書式付き入力を読み取ります
「入力のスキャン」は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フィードバックを取得できます。ローカル設定は不要です。