文字列1 - スペースでGO言語の学習ノートを入力してください

GOは、最近の言語を学び始めて、いくつかのプログラミング演習を行いました。スペースを入力文字列への倫理の問題は、それは非常に簡単なC / C ++で実装することであるが、GOはそう簡単ではないように見えました。学習されたC / C ++を知ってもよい、C取得()関数で使用することができるスペースを入力文字列を実装するためのC ++のgetline()関数で使用することができます。我々はGOで同様の機能があるかどうかお尋ねしている可能性があることを?答えはノーです。

GOとFMTパッケージのOSに加えて、我々はまた、BUFIO、バッファの入力と出力を使用して実装することができます。
どのように我々は、キーボード(コンソール)入力からユーザーデータを読みますか。標準のキーボードまたは他の入力(os.Stdin)からデータを読み出すための入力手段。

Scan_バッグまたは入力Sscan_な機能の一連FMT 1。

package main

import "fmt"

var (
    firstName, lastName string
    str1, str2, str3 string
    num int
    str = "We / love / Go / 1314"
    format = "%s / %s / %s / %d"
)

func main() {
    fmt.Println("Please input your full name: ")
   // 使用Scan输入
    fmt.Scan(&firstName, &lastName)
    fmt.Printf("Hi %s %s!\n", firstName, lastName)

    fmt.Println("Please again input your full name: ")
    // 使用Scanln输入
    fmt.Scanln(&firstName, &lastName)
    fmt.Printf("Hi %s %s!\n", firstName, lastName)

    fmt.Println("Please again input your full name: ")

    // 使用Scanf输入
    fmt.Scanf("%s %s", &firstName, &lastName)
    fmt.Printf("Hi %s %s!\n", firstName, lastName)

    fmt.Println("From the str we read: ")

    // 使用Sscanf读取
    fmt.Sscanf(str, format, &str1, &str2, &str3, &num)
    fmt.Println(str1, str2, str3, num)
}

入力された場合:

xiao hua
xiao ming
xiao hong

出力は次のようになります。

Please input your full name: 
xiao hua
Hi xiao hua!
Please again input your full name: 
xiao ming
Hi xiao ming!
Please again input your full name: 
xiao hong
Hi xiao hong!
From the str we read: 
We love Go 1314
スキャン()関数のプロトタイプは次のとおりです。
func Scan(a ...interface{}) (n int, err error) {
    return Fscan(os.Stdin, a...)
}

この機能が正常に配信された正常値を読み出すための標準的な入力からブランクスキャンのスキャンテキストを分離し、パラメータに格納されます。ホワイトスペースとして改行。すべてのエラー正常に返さスキャンと遭遇したエントリの数。エントリーが少ない、指定されたパラメータより読み取った場合、それはエラーレポート理由を返します。

Scanln()関数のプロトタイプは次のとおりです。
func Scanln(a ...interface{}) (n int, err error) {
    return Fscanln(os.Stdin, a...)
}

Scanln同様のスキャンが、それは改行でスキャンを停止し、最後のエントリの後に改行またはEOFがなければなりません。

scanf()関数のプロトタイプは次のとおりです。
func Scanf(format string, a ...interface{}) (n int, err error) {
    return Fscanf(os.Stdin, format, a...)
}

ブランクscanfの正常読み取り値が正常に配信されているこの機能を分離パラメータに格納されている指定されたフォーマットパラメータフォーマットに従って、標準入力からテキストをスキャンしました。すべてのエラー正常に返さスキャンと遭遇したエントリの数。
入力中に改行文字は、フォーマット改行と一致する必要があります。

sscanf()関数のプロトタイプは次のとおりです。
func Sscanf(str string, format string, a ...interface{}) (n int, err error) {
    return Fscanf((*stringReader)(&str), format, a...)
}

正常に読み取られた値がこの関数に分離パラメータに格納されている指定されたフォーマットパラメータフォーマットに従ってスキャンされたテキスト文字列strからブランクSSCANFは、正常に配信されています。すべてのエラー正常に返さスキャンと遭遇したエントリの数。
入力中に改行文字は、フォーマット改行と一致する必要があります。

スキャンとScanln差分法:
  • スキャン機能についての内容は、改行がコンテンツへのアクセススキャンには影響しませんがあっても、スペースです。
  • Scanln機能にかかわらず、フォローアップもコンテンツを入力する必要があるかどうかの、スペースに関するコンテンツを識別しますが、改行の場合は、すぐに終了します。

2. BU FiのOバッグは、入力文字列のためのスペースでリーダーをバッファリング

package main

import (
    "bufio"
    "fmt"
    "os"
    )
//var inputReader *bufio.Reader
//var input string
//var err error

func main() {

    inputReader := bufio.NewReader(os.Stdin)    // 使用了自动类型推导,不需要var关键字声明
    //inputReader = bufio.NewReader(os.Stdin)

    fmt.Println("Please input your name: ")
    
    //input, err = inputReader.ReadString('\n')
    input, err := inputReader.ReadString('\n')

    if err == nil {
        fmt.Printf("Your name is: %s\n", input)
    }
}

入力された場合:

xiao hua

出力は次のようになります。

Please input your name: 
xiao hua
Your name is: xiao hua

実施形態では、inputReaderリーダーBU FiのOクラスへのポインタであり、次いでbufio.NewReader(os.Stdin)による主な機能は、
ERリーダーFF BUを作成し、変数inputReaderに結合されました。

bufio.NewReader()関数のプロトタイプ:
func NewReader(rd io.Reader) *Reader {
    return NewReaderSize(rd, defaultBufSize)
}

任意のオブジェクトとの法律は、パラメータのインターフェースio.Reader BU Fiのo.NewReader()として使用し、新しい緩衝io.Reader、os.Stdin出会うこの状態を返すことができます。Readerは(delimをバイト)をReadString方法があるバッファリング、このメソッドは、入力の終了前に指定された終端文字(delimをバイト)に達するまでのデータを読み取ることがあったであろう、ターミネーターは一緒でER FF府への入力の一部となります。

RearString()関数のプロトタイプは次のとおりです。
func (b *Reader) ReadString(delim byte) (string, error) {
    bytes, err := b.ReadBytes(delim)
    return string(bytes), err
}

戻り値をReadStringは、文字列と読みnilです。具体的なターミネータは、(delimをバイト)最後に読んでいない場合は、ERR!= nilを返します。上記の例では、我々は最後まで「\ n」はまで、キーボードから入力されました。画面は標準出力os.Stdout、エラー情報が書き込まれos.Stderrです。ほとんどの場合、os.Stderr同等os.Stdout。

一般に、コードGOの変数宣言を省略し、直接使用「:=」自動型派生、例えば:

inputReader := bufio.NewReader(os.Stdin) 
input, err := inputReader.ReadString('\n')

3.まとめ

機能のScan_またはSscan_シリーズのGOの使用量とシステム機能scan_ Cは似ている、Cの人々はすぐにこれらの機能を使用することを学ぶことができます学びました。バッファリングoをしかし、スペースを入力文字列を実現するためにos.StdinリーダーOSバッグやバッグBU FIを採用することになります。


個人ホームページ:

www.codeapes.cn

おすすめ

転載: www.cnblogs.com/codeapes666/p/12093790.html