在 golang 中读取行

Read line in golang

在 Go 中有很多选项可以做到这一点。例如:

scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}

reader := bufio.NewReader(os.Stdin)
text, _ := reader.ReadString('\n')

两者都不适用于我的情况。我找不到换行扫描不起作用的原因。

这是我正在处理的问题:https://www.hackerrank.com/challenges/30-dictionaries-and-maps

这是我的代码:

package main
import (
    "fmt"
    "bufio"
    "os"
    "strings"
)

func main() {
    var count int
    fmt.Scan(&count)

    m := make(map[string]string)
    for i := 0; i<count; i++{
        reader := bufio.NewReader(os.Stdin)
        text,err := reader.ReadString('\n')
        if err != nil {
           fmt.Println(err)
        }
        value := strings.Fields(text)
        m[value[0]] = value[1]
    }
    var names []string
    for i := 0; i<count; i++{
        var name string
        fmt.Scan(&name)
        names = append(names,name)
    }

    for j:= 0; j<len(names);j++{
        if m[names[j]] != ""{
            fmt.Println(names[j] +" = "+ m[names[j]])
        }else{
            fmt.Println("Not found")
        }

    }

}

它在我的编辑器中工作,但是当我使用问题的输入时,它不起作用。

首先,您在循环中每次启动 reader。
其次,如果您使用 Reader,请坚持使用。您初始化输入 reader,然后尝试返回 fmt.Scan,但是 Reader 已经得到您的输入。
第三,请记住您需要 .Trim() 输入

    package main

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

    func main() {
        var count int
        fmt.Scan(&count)
        reader := bufio.NewReader(os.Stdin)
        m := make(map[string]string)
        for i := 0; i<count; i++{

            text,err := reader.ReadString('\n')
            if err != nil {
                fmt.Println(err)
            }
            value := strings.Fields(text)
            m[value[0]] = value[1]
        }
        var names []string
        for i := 0; i<count; i++{
            var name string
            name, _ = reader.ReadString('\n')
            names = append(names,strings.Trim(name, " \n"))
        }

        for _, name := range names {

            phone, found := m[name]
            if found {
                fmt.Println(name +"="+ phone)
            }else{
                fmt.Println("Not found")
            }

        }

    }

根据评论中的要求,这是我的工作示例:

package main

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

func main() {
    phonebook := make(map[string]int)

    var count int
    fmt.Scan(&count)
    for i := 0; i < count; i++ {
        var name string
        var number int
        fmt.Scan(&name, &number)
        phonebook[name] = number
    }

    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        name := scanner.Text()
        if number, ok := phonebook[name]; ok {
            fmt.Printf("%s=%d\n", name, number)
        } else {
            fmt.Println("Not found")
        }
    }
}