我正在玩Go。我想这样做,当有人进入'hi'打印hiii
这是我的代码
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")
}
}
}
答案 0 :(得分:3)
有一个技巧:当使用带分隔符的ReadString和ReadBytes函数时,返回的字符串(和字节)包含分隔符。这就是为什么条件不正确,你的实际字符串是" hi \ n"而不是"嗨"。
为了从标准输入读取,您可以使用ReadLine功能,或使用包strings
和bytes
手动修剪结束字符。
此外,您可以使用扫描仪,默认情况下会读取线条。以下是一些所有人都做同样工作的例子:
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")
}
}
答案 1 :(得分:0)
只需添加\n
if text == "hi\n" {
fmt.Println("hiii")
}