代码如下:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
reader := bufio.NewReader(strings.NewReader("a" +
"2" +
"3"))
var a byte
fmt.Fscan(reader, &a)
fmt.Println(a)
}
它将输出0
但如果我把输入改成这个
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
reader := bufio.NewReader(strings.NewReader("1" +
"2" +
"3"))
var a byte
fmt.Fscan(reader, &a)
fmt.Println(a)
}
输出为:
我将输入从a\n2\n3
更改为1\n2\n3
。导致a
无法扫描到值。
我不知道为什么,谁能给我解释一下?谢谢。
1条答案
按热度按时间06odsfpq1#
fmt.Fscan
检查输入参数的类型以驱动其解析行为。在本例中,唯一的输入参数是byte
类型,它是uint8
的内置类型别名(链接),这使得fmt.Fscan
尝试从输入io.Reader
中解析出无符号数(链接).123
可以成功地解析为无符号数字,而a23
不能。fmt.Fscan
确实有成功扫描的项目数的返回值和一个错误,您将丢弃该错误。如果您将错误打印出来,这样更容易发现问题。如果您的目标是逐字节读取某些输入,则可以直接使用
io.Reader
的Read
。