Golang fmt.Scan() 函数及示例
在 Golang 中,fmt.Scan() 函数是非常常见的输入函数,它能够从标准输入读取用户输入并将其存储到指定的变量中,是一个非常实用的函数。本文将详细介绍 fmt.Scan() 函数的使用方法,并给出一些示例。
fmt.Scan() 函数概述
下面是 fmt.Scan() 函数的语法:
fmt.Scan(a ...interface{}) (n int, err error)
该函数接受任意数量的参数,这些参数表示输入数据要存储的变量。fmt.Scan() 将每次读取一段以空白符(’ ‘,’\t’,’\n’ 和 ‘\r’)分隔的字符串,并将其转化为指定变量的类型。
fmt.Scan() 函数会返回成功读取的参数个数和任何遇到的错误。如果读取过程中发生错误,函数会立即停止,不会继续对输入数据进行处理。
fmt.Scan() 函数示例
下面是一些 fmt.Scan() 函数的示例:
示例 1:读取两个整数
var x, y int
fmt.Scan(&x, &y)
fmt.Println(x, y)
上面的示例会从标准输入读取两个整数,并将它们存储到变量 x 和 y 中,最后将这两个变量的值输出。
示例 2:读取一个字符串和一个浮点数
var s string
var f float64
fmt.Scan(&s, &f)
fmt.Printf("s=%s, f=%f\n", s, f)
上面的示例会从标准输入读取一个字符串和一个浮点数,并将它们分别存储到变量 s 和 f 中,最后将这两个变量的值输出。
示例 3:读取一行字符串
var s string
fmt.Scanln(&s)
fmt.Println(s)
上面的示例会从标准输入读取一行字符串,并将它们存储到变量 s 中,最后将这个变量的值输出。
示例 4:读取一段数字字符串
var s string
fmt.Scan(&s)
var sum int
for _, v := range s {
if v < '0' || v > '9' {
continue
}
sum = sum*10 + int(v-'0')
}
fmt.Println(sum)
上面的示例会从标准输入读取一段数字字符串,并将它们转化为整数并输出。
fmt.Scan() 函数常见错误处理
当你使用 fmt.Scan() 函数读取输入数据时,你须要特别注意输入数据格式的正确性,否则就会发生错误。下面是一些常见的错误处理方式。
错误处理 1:无效输入
var xint int
_, err := fmt.Scan(&xint)
if err != nil {
if err == io.EOF { // 流结束
fmt.Println("End of input")
} else {
fmt.Println("Invalid input")
}
}
上面的示例会检查输入数据是否为无效数据。如果输入数据是无效数据,无效数据会被忽略,只有一个无效数据的错误会被返回。
错误处理 2:遇到流结束
var x int
_, err := fmt.Scan(&x)
if err != nil {
if err == io.EOF { // 流结束
fmt.Println("End of input")
} else {
fmt.Println("Error:", err)
}
}
上面的示例会检查输入流是否结束。如果输入流结束,那么错误信息会告诉程序我们已经读取了所有的数据,否则会输出错误信息。
错误处理 3:读取不同类型的数据
var x int
var f float64
_, err := fmt.Scan(&x, &f)
if err != nil {
if err == io.EOF { // 流结束
fmt.Println("Endof input")
} else {
fmt.Println("Error:", err)
}
}
上面的示例会检查输入数据是否为正确的类型。如果输入数据的类型不正确,会输出错误信息。
结论
本文详细介绍了 Golang 中的 fmt.Scan() 函数的使用方法,并给出了一些示例。需要注意的是,在使用 fmt.Scan() 函数读取输入数据时,必须确保输入数据的正确性,否则会发生错误。希望本文能够帮助大家更好地理解和使用 fmt.Scan() 函数。