2016-10-13 42 views
-3

我正在玩Go。我想使它所以當有人進入「HI」它打印HIII如果語句與Go

這裏是我的代碼

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") 
     } 
    } 

} 
+4

什麼從['ReadString'(https://golang.org/pkg/bufio/#Reader.ReadString)文檔是你的問題 – mittmemo

+0

:' ReadString讀取直到輸入中第一次出現delim,返回一個包含數據的字符串直至幷包含分隔符。 – JimB

回答

0

只需添加\n這樣

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

有一個訣竅:當使用帶分隔符的ReadString和ReadBytes函數,返回的字符串(和字節)包含分隔符。這就是條件不成立的原因,你的實際字符串是「hi \ n」而不是「hi」。

爲了從標準輸入讀取,您可以使用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") 
    } 

}