Golang fmt.Scan() 函数及示例

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() 函数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程