在golang中读取行

6ioyuze2  于 2023-01-28  发布在  Go
关注(0)|答案(3)|浏览(138)

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

    }

}

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

klsxnrf1

klsxnrf11#

按照评论中的要求,下面是我的工作示例:

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

ddhy6vgd2#

首先,在循环中每次都要初始化阅读器。
第二,如果你使用Reader,请坚持使用它。你初始化input 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")
            }

        }

    }
flseospp

flseospp3#

package main
import "fmt"

func main() {
 //Enter your code here. Read input from STDIN. Print output to STDOUT
    var amount int 
    fmt.Scan(&amount)
    n := make([]int, amount)
   
    for _, v := range n {
        fmt.Scan(&v)
        fmt.Println(v)   
    }
  }

不是最优的,但它通过了黑客等级测试案例。这就是全部。

相关问题