2016-10-14 4 views
1

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

実際の問題は何ですか?エラーが発生していますか?間違った出力? (もしそうなら、どんな入力と何が間違った出力ですか?) – smarx

+0

私はあなたが未知数を受け取ると言う事実があるにもかかわらず、あなたは 'count'クエリ(' count'電話帳エントリの後) 。他のバグがあるかどうかは分かりません...あなたがどのような問題を抱えているか教えてください。 – smarx

+0

私が見つけた別の問題:出力に '='の周りにスペースがあります。 ( 'foo = 1234'の代わりに' foo = 1234'を出力します。) – smarx

答えて

1

.Trim()する必要があることを覚えておいてください、私の作業例だった:

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

まず、ループ内で毎回リーダーを開始します。
2番目に、Readerと一緒に行く場合は、それに固執してください。あなたは入力リーダーを初期化してから、fmt.Scanに戻ろうとしますが、Readerはすでにあなたの入力を受け取りました。
第三に、あなたはここで、コメントで要求されるように、あなたの入力

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

     } 

    } 
+0

ありがとう!一部のテストケースでは動作していますが動作していません。あなたは "https://www.hackerrank.com/challenges/30-dictionaries-and-maps"をチェックすることができます –

+1

私はここで、Goの行を読むのに役立つだけで、HackerRankの問題を解決するのではありません:) –

関連する問題