1 回答

TA貢獻1811條經驗 獲得超6個贊
每個參數都是函數內部的本地副本。您必須將指針傳遞給TakeInput()(例如&name和&school)并修改指向的值(例如*value = scanner.Text(),否則您只修改函數返回時丟棄的副本。
例如:
func TakeInput(value *string) {
scanner := bufio.NewScanner(os.Stdin)
if scanner.Scan() {
*value = scanner.Text()
}
if err := scanner.Err(); err != nil {
fmt.Println("Error encountered:", err)
}
}
func main() {
var name, school string
fmt.Printf("Enter your name: ")
TakeInput(&name)
fmt.Printf("Enter your school name: ")
TakeInput(&school)
fmt.Println(name, school)
}
還要注意bufio.Scanner有一個內部緩沖區。它可能讀取的內容多于返回的內容,當您bufio.Scanner在另一個TakeInput()調用中創建新的內容時,它可能無法讀取以前讀取、緩沖和丟棄的數據。
所以在外部創建掃描儀TakeInput(),例如
func TakeInput(scanner *bufio.Scanner, value *string) {
if scanner.Scan() {
*value = scanner.Text()
}
if err := scanner.Err(); err != nil {
fmt.Println("Error encountered:", err)
}
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
var name, school string
fmt.Printf("Enter your name: ")
TakeInput(scanner, &name)
fmt.Printf("Enter your school name: ")
TakeInput(scanner, &school)
fmt.Println(name, school)
}
- 1 回答
- 0 關注
- 148 瀏覽
添加回答
舉報