2013-12-23 63 views
3

我有一個程序,正在採取一個數組和洗牌,一旦它完成了它將打印出混洗陣列的第一個值之一。一旦它打印出我想要的值,將顯示「Press return to continue」消息。這條消息會一直存在,直到用戶按下返回鍵,然後它會從混洗數組中獲得下一個值。去,按返回繼續

我有一個腳本爲第一個值工作正常,但在按回車後,它只是在我的終端中創建空行。

這是我的例子:

package main 

import (
    "bufio" 
    "fmt" 
    "math/rand" 
    "os" 
    "time" 
) 

func main() { 

    users := make(map[int]string) 

    users[0] = "Mike" 
    users[1] = "Paul" 
    users[2] = "Steve" 
    users[3] = "Lawrence" 
    users[4] = "Stephen" 
    users[5] = "James" 

    getNextSpeaker(users) 

} 

func getNextSpeaker(users map[int]string) { 
    numUsers := len(users) 
    list := randList(1, numUsers) 

    for _, element := range list { 
     fmt.Println(users[element-1]) 
     pressAnyKey() 
    } 

} 

func randList(min, max int) []int { 
    if max < min { 
     min, max = max, min 
    } 
    length := max - min + 1 
    t0 := time.Now() 
    rand.Seed(int64(t0.Nanosecond())) 
    list := rand.Perm(length) 
    for index, _ := range list { 
     list[index] += min 
    } 

    return list 
} 

func pressAnyKey() string { 
    fmt.Println("Press Return To Continue...") 
    reader := bufio.NewReader(os.Stdin) 
    input, err := reader.ReadString('.') 
    if err != nil { 
     panic(err) 
    } 

    return input 
} 

端子輸出:

$ go run src/RandomMeetingSpeaker/meeting.go 
Paul 
Press Return To Continue... 
<empty line...> 
<empty line...> 
<empty line...> 
<empty line...> 
<empty line...> 
etc etc 

回答

5

ReadString需要分隔符字節。在你的情況下,這是一個換行符,而不是一個點。只需使用

input, err := reader.ReadString('\n') 

it will work更換線

input, err := reader.ReadString('.') 

+0

謝謝,那可以工作:) – mic