2016-10-14 4 views
1

이동에서 이렇게하는 옵션이 너무 많습니다. 예를 들어 :골 라인에서 줄 읽기

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

할 필요가 있음을 기억 내 작업 예였다

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

우선, 매번 독자가 루프를 시작합니다.
두 번째로, 독자와 함께 간다면, 그것을 지키십시오. 입력 리더를 초기화 한 다음 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") 
      } 

     } 

    } 
+0

감사합니다. 일부 테스트 케이스에서는 작동하지만 작동하지 않습니다. 당신은 "https://www.hackerrank.com/challenges/30-dictionaries-and-maps"에서 확인할 수 있습니다 –

+1

나는 HackerRank 문제를 해결하지 않고 Go의 행을 읽는 데 도움이 되고자합니다. :) –