package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Printf("Input: ")
input, _ := reader.ReadString('\n')
fmt.Println("thing\n"[:5] + "\"")
fmt.Println(input[:len(input)-1] + "\"")
return
}
运行代码:
Input: thing
thing"
"hing
为什么第二个串联的行为奇怪?假定ReadString()操作返回一个以换行符结尾的字符串,它应该产生相同的结果。请解释发生了什么事。
答案 0 :(得分:2)
那是因为您大概在Windows上。
您从键盘上实际输入的不是thing\n
,而是thing\r\n
因此,当您执行fmt.Println(input[:len(input)-1] + "\"")
时,它只会截断最新的\n
并留下\r
。
因此,终端打印thing
,然后到达\r
,该字符将回车返回到字符串的开头,然后打印双引号。但是笔架现在处于第一个位置,它有效地覆盖了该行的第一个字符,使您剩下"hing