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 关注
- 120 浏览
添加回答
举报