在golang阅读一行 [英] Read line in golang

查看:134
本文介绍了在golang阅读一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

或 p>

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

两者都不适用于我的情况。我无法找到新行扫描无效的原因。



以下是我正在处理的问题: 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<计数; i ++ {
reader:= bufio.NewReader(os.Stdin)
text,err:= reader.ReadString('\\\
')
if err!= nil {
fmt.Println(err)
}
value:= strings.Fields(text)
m [value [0]] = value [1]
}
var name [] string
for i:= 0; I<计数; i ++ {
var name name
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(未找到)
}

}

}
code>

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

解决方案

按照评论的要求,这是我的工作示例:












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

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

scanner:= bufio.NewScanner(os.Stdin)
用于scanner.Scan(){
名称:= scanner.Text()
如果数字,ok:= phonebook [名称]; OK {
fmt.Printf(%s =%d \ n,姓名,号码)
}其他{
fmt.Println(找不到)
}
}
}


There are so many option to do this in Go. For example:

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

or

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

Neither is working in my case. I am unable to find the reason why new line scan is not working.

Here's the question I'm working on: https://www.hackerrank.com/challenges/30-dictionaries-and-maps

And here's my code:

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

    }

}

It is working in my editor, but when I use the question's input, it doesn't work.

解决方案

As requested in the comments, here was my working example:

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

这篇关于在golang阅读一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆