scan メソッドを使用してコンソール入力を実装する方法

PHPz
リリース: 2023-04-11 10:07:04
オリジナル
909 人が閲覧しました

Go 言語では、scan メソッドを使用して標準入力からデータを読み取ることができます。 scan メソッドは、文字列、数値、ブール値など、あらゆる種類のデータを読み取ることができます。この記事では、scan メソッドを使用してコンソール入力を実装する方法を詳しく紹介します。

基本構文

scan メソッドの基本構文は次のとおりです。

func Scan(a ...interface{}) (n int, err error)
ログイン後にコピー

入力からデータを読み取り、指定されたパラメーターに格納します。 。パラメータ a は、読み取る必要があるデータを表します。パラメータはいくつでも渡すことができます。各パラメータは、入力データを格納するために使用されるポインタ型です。戻り値 n は正常に読み取られたパラメータの数を示し、戻り値 err は考えられるエラーを示します。

以下は、コンソールから 2 つの整数を読み取る方法を示す簡単な例です。

func main() {
    var a, b int
    fmt.Print("请输入两个整数:")
    n, err := fmt.Scan(&a, &b)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, []int{a, b})
}
ログイン後にコピー

上記のコードを通じて、Scan メソッドの基本を確認できます。使用法。上記のコードを実行すると、プログラムはユーザーに 2 つの整数の入力を求めます。ユーザーの入力が完了すると、プログラムは 2 つの整数を変数 ab に格納し、 2 つの整数。

scan の特徴

Scan メソッドには次の特徴があります:

1. スペースを無視します

Scanデータを読み取るとき、メソッドはデータ間のスペースを自動的に無視します。次のコードに示すように、

func main() {
    var a, b, c string
    fmt.Print("请输入三个字符串:")
    n, err := fmt.Scan(&a, &b, &c)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, []string{a, b, c})
}
ログイン後にコピー

文字列 hello world go を入力すると、プログラムは文字列間のスペースを自動的に無視し、これら 3 つの文字列を出力します。

2. 復帰を待機中

Scan メソッドは、データの読み取り時にユーザーが復帰文字 \n を入力するのを待機します。入力が完了したことを確認します。ユーザーが復帰文字を入力しない場合、プログラムはユーザーの入力を待ちます。次のコードに示すように:

func main() {
    var s string
    fmt.Print("请输入一个字符串:")
    n, err := fmt.Scan(&s)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, s)
}
ログイン後にコピー
ログイン後にコピー

文字列 hello を入力した後、プログラムは結果をすぐに出力せず、ユーザーが復帰文字 \ を入力するのを待ちます。 n 、結果が出力されます。

3. 改行文字は読み取られません

Scan メソッドは、データの読み取り時に入力内の改行文字を読み取りません\n。たとえば、Scan メソッドを通じて文字列を読み取る場合、入力文字列内の改行文字 \n は読み取られません。次のコードに示すように:

func main() {
    var s string
    fmt.Print("请输入一个字符串:")
    n, err := fmt.Scan(&s)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, s)
}
ログイン後にコピー
ログイン後にコピー

文字列 hello\nworld を入力すると、プログラムは文字列 hello のみを読み取り、文字列改行文字 は読み取りません。 \n で。

詳細な分析

Scan メソッドの実装は、fmt パッケージの Scanf 関数に基づいています。 。 Scanf メソッドには次の機能があります:

1. フォーマットされた入力

Scanf メソッドはフォーマットされた入力をサポートします。フォーマット文字列を使用して、読み込むデータ型を指定できます。たとえば、次の書式文字列を使用して整数と文字列を読み取ることができます:

func main() {
    var a int
    var b string
    fmt.Print("请输入一个整数和一个字符串:")
    n, err := fmt.Scanf("%d %s", &a, &b)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, []interface{}{a, b})
}
ログイン後にコピー

上記のコードで、定義された書式文字列 "%d %s" は、「最初に整数を読み取る」ことを意味します。 、スペースで区切られた文字列を読み取ります。

2. カスタム区切り文字

Scanf メソッドはカスタム区切り文字をサポートします。デフォルトでは、Scanf メソッドは区切り文字としてスペースを使用します。区切り文字は、Scanf メソッドの ScanState パラメーターを使用してカスタマイズできます。次のコードに示すように:

func main() {
    var a, b string
    fmt.Print("请输入两个字符串,用逗号分隔:")
    s := bufio.NewScanner(os.Stdin)
    s.Split(func(data []byte, atEOF bool) (adv int, token []byte, err error) {
        for i := 0; i < len(data); i++ {
            if data[i] == ',' {
                return i + 1, data[:i], nil
            }
        }
        return 0, data, bufio.ErrFinalToken
    })
    if s.Scan() {
        a = s.Text()
    }
    if s.Scan() {
        b = s.Text()
    }
    fmt.Printf("您输入的字符串是:%v\n", []string{a, b})
}
ログイン後にコピー

上記のコードでは、bufio パッケージの NewScanner メソッドを通じて Scanner オブジェクトを作成します。およびセパレータは Split メソッドを通じてカスタマイズされます。 delimiter 関数では、区切り文字としてカンマを使用して入力文字列を解析し、変数 ab に格納します。

概要

この記事の導入部を通じて、Scan メソッドの基本的な構文と特性、およびコンソール入力の実装方法について学びました。 Scan メソッドは、入力を処理するときに改行文字 \n を入力に読み込まないことに注意してください。さらに、Scanf メソッドはカスタム区切り文字とフォーマットされた入力をサポートしており、コンソール入力をより柔軟に処理できます。

以上がscan メソッドを使用してコンソール入力を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート