2016-10-13 6 views
-3

私は周りで遊んでいます。私は誰かが入ったとき、それはそう「ハイ」それはここでHIIIIf文でGO文を

を出力したい私のコードは、ちょうどそのコツがあり

if text == "hi\n" { 
    fmt.Println("hiii") 
} 
+4

[ 'ReadString'](https://golang.org/pkg/bufio/#Reader.ReadString)ドキュメントからのご質問 – mittmemo

+0

概要:' ReadStringは、入力中にdelimが最初に現れるまで読み込み、デリミタまでのデータを含む文字列を返します。 – JimB

答えて

0

です:ときデリミタでReadString関数とReadBytes関数を使用すると、返される文字列(およびバイト)に区切り文字が含まれます。そのため、条件が真ではなく、実際の文字列は「hi \ n」であり、「hi」ではありません。

stdinから読み取るには、ReadLine関数を使用するか、パッケージstringsbytesでエンドライン文字を手動でトリミングします。

また、スキャナを使用すると、デフォルトで行が読み込まれます。ここでは、すべてが同じ仕事をするいくつかの例は以下のとおりです。

package main 

import (
    "bufio" 
    "bytes" 
    "fmt" 
    "os" 
    "strings" 
) 

func main() { 
    reader := bufio.NewReader(os.Stdin) 
    fmt.Print("-> ") 
    text, _, _ := reader.ReadLine() 
    if string(text) == "hi" { 
     fmt.Println("hii") 
    } 

    fmt.Print("-> ") 
    stext, _ := reader.ReadString('\n') // stext ends with '\n', it reads the delimiter 
    stext = strings.TrimRight(stext, "\n") 
    if stext == "hi" { 
     fmt.Println("hii") 
    } 

    fmt.Print("-> ") 
    text, _ = reader.ReadBytes('\n') 
    text = bytes.TrimRight(text, "\n") 
    if string(text) == "hi" { 
     fmt.Println("hii") 
    } 

    fmt.Print("-> ") 
    scanner := bufio.NewScanner(os.Stdin) 
    scanner.Scan() 
    stext = scanner.Text() 
    if stext == "hi" { 
     fmt.Println("hii") 
    } 

    fmt.Print("−> ") 
    scanner.Scan() 
    text = scanner.Bytes() 
    if string(text) == "hi" { 
     fmt.Println("hii") 
    } 

} 
3

こと\nなどを追加

package main 

import (
    "fmt" 
    "bufio" 
    "os" 
) 

func main(){ 

    reader := bufio.NewReader(os.Stdin) 
    fmt.Println("Simple Shell") 
    fmt.Println("---------------------") 

    for { 
     fmt.Print("-> ") 
     text, _ := reader.ReadString('\n') 
     if (text == "hi") { 
      fmt.Println("hiii") 
     } 
    } 

}