Go语言中 Scan 与 Scanf 和 Scanln的区别

三种输入函数的区别

首先它们都是在fmt包下的三个扫描函数,类似于java中是Scanner一样,在Go语言中使用&取值指针来进行获值

第一种:fmt.Scan

输入:读取以空白符分割的值返回到地址中进行修改,换行视为空白符
返回值:错误处理,返回值中有一个int类型的值是返回正确的数量,有一个err是错误的原因

var (               // 定义全局变量
		name int
		age int
		married int
	)
	ag1, err := fmt.Scan(&name,&age,&married) 返回类型根据使用场景可以不写,但是根据代码规范,err都要处理,加上在这里为了更加严谨,确实需要err来处理
	fmt.Print(err) // 这里如果出错,则显示出错的原因
	fmt.Println(ag1) // 这个返回参数取到的是成功了几个
	fmt.Printf("扫描结果:name:%d age:%d married:%d \n",name,age,married) // Scan读取以空白为分割的值保存给参数中,换行符视为空白符,如果返回的数据比提供的参数少,会返回错误原因

成功结果:
在这里插入图片描述
有错误结果:
在这里插入图片描述
开头错误则直接全部错误:
在这里插入图片描述

第二种 fmt.Scanf

它与Scan比更加严谨,使用format读取空白符,在输入时也必须输入要输入的数据,适用场景学生输入账号,性别,而且必须要根据指定的方式输入,顺序也不可以改变

var (
		name    string
		age     int
		married bool
	)
	ag1, err := fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &married) // 这个函数中参数前必须填入标识格式如1: 2: ...
	fmt.Println(ag1)
	fmt.Println(err)
	fmt.Printf("扫描结果 name:%s age:%d married:%t", name, age, married)

成功结果:
在这里插入图片描述
有错误结果:
在这里插入图片描述

第三种 fmt.Scanln

Scanln 类似 Scan,但它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。使用场景就是只要换行就结束
返回错误和Scan一样

var (
		name string
		age int
		married int
	)
	ag1, err := fmt.Scanln(&name,&age,&married)
	fmt.Println(ag1)
	fmt.Println(err)
	fmt.Printf("扫描结果 name:%s age:%d married:%d \n", name, age, married)

成功结果:
在这里插入图片描述

有错误结果:
在这里插入图片描述
这里有一个错误

var (
		name string
		age int
		married bool  // 这里由原本的int改变成了bool
	)
	ag1, err := fmt.Scanln(&name,&age,&married)
	fmt.Println(ag1)
	fmt.Println(err)
	fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age, married)

错误显示:
在这里插入图片描述
欢迎大家留言探讨

猜你喜欢

转载自blog.csdn.net/weixin_45765795/article/details/112766580