在golang中读取行

时间:2016-10-14 05:36:21

标签: go reader

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

    }

}

它在我的编辑器中工作,但是当我使用问题的输入时,它无法正常工作。

2 个答案:

答案 0 :(得分:1)

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

$(document).on('click','#but2',function(){
   alert('something');
});

答案 1 :(得分:0)

首先,每次循环启动读者 其次,如果你选择Reader,请坚持下去。你初始化输入阅读器,然后尝试回到fmt.Scan,但是阅读器已经得到了你的输入 第三,请记住,您需要.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")
            }

        }

    }