一些废话:由于之前一直在弄一些图像处理的东西,所以到现在才匆匆忙忙补一下之前的课程
回到正文:
这段程序用bufio.NewReader()将输入转换为一个只读的流(scanf会更加简洁,但因为要求所以这里利用bufio),之后用ReadString()从流中读取一行,读取一行后会发现最后多出了一个换行符(官方文档给出,作者也是Go小白,暂时没法深究),因此利用Trimsuffix()去掉换行符,最后用strconv.Atoi()转成一个数字输出
reader := bufio.NewReader(os.Stdin)
//读取一行输入
input, err := reader.ReadString('\n')
//去换行符
input = strings.TrimSuffix(input, "\n")
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input")
return
}
fmt.Println("Your guess is", guess)
试着跑了一下,问题出现了—— 类型转换错误,guess值为0
在Windows系统中,回车符是"\r\n",而不是Unix/Linux系统中的"\n",导致代码无法正确解析输入。
为了解决这个问题,可以在读取输入前先使用strings.Replace()函数来将"\r\n"替换为"\n",这样就能正确解析输入了。修改后的部分代码如下:
input = strings.Replace(input, "\r\n", "\n", -1)
//去换行符
input = strings.TrimSuffix(input, "\n")
func Replace(s, old, new string, n int) string
| 参数 | 描述 |
|---|---|
| s | 要替换的整个字符串。 |
| old | 要替换的字符串。 |
| new | 替换成什么字符串。 |
| n | 要替换的次数,-1,那么就会将字符串 s 中的所有的 old 替换成 new。 |
| 参考文章:Go语言字符串替换-Golang字符串替换-Go语言字符串Replace函数 |
作者文章水平不高,Go这方面也才刚接触,有错误或不足之处之处请大佬们指出