全栈编程

Balance $ 2,317
Item Sold 1230
文章作者: 全栈编程@luboke.com
版权声明: 本文章为go语言体系课视频教程配套电子书,版权归 全栈编程@luboke.com所有,欢迎免费学习,转载必须注明出处!但禁止任何商业用途,否则将受到法律制裁!
package main

import "fmt"

/*

fmt包中提供了3类读取输入的函数:

	Scan家族:从标准输入os.Stdin中读取数据,包括Scan()、Scanf()、Scanln()
	SScan家族:从字符串中读取数据,包括Sscan()、Sscanf()、Sscanln()
	Fscan家族:从io.Reader中读取数据,包括Fscan()、Fscanf()、Fscanln()

其中:

	Scanln、Sscanln、Fscanln在遇到换行符的时候停止
	Scan、Sscan、Fscan将换行符当作空格处理
	Scanf、Sscanf、Fscanf根据给定的format格式读取,就像Printf一样
	这3家族的函数都返回读取的记录数量,并会设置报错信息,例如读取的记录数量不足、超出或者类型转换失败等。

*/

func main()  {
	//Scan、Scanf和Scanln
	//Scan家族函数从标准输入读取数据时,将默认以【空格】为分隔符分隔标准输入中的内容,并将分隔后的各个记录保存到给定的变量中。其中Scanf()可以指定分隔符。
	//例如,使用Scanln函数等待用户输入数据,或从管道中读取数据。下面的代码将等待用户输入,且将读取的内容分别保存到name变量和age变量中:

	var (
		name string
		age  int
	)
	//因为Scanln()遇到换行符或EOF的时候终止读取,所以在输入的时候只要按下回车键就会结束读取。
	fmt.Println("fmt.Scanln的用法:输入姓名和年龄,使用空格分隔:")
	fmt.Scanln(&name, &age)
	fmt.Printf("fmt.Scanln使用换行符或者EOF为终止读取->name: %s age: %d\n", name, age)


	//输入时,第一个字段会转换成字符串格式保存到name变量中,第二个记录会转换成整数保存到age中,如果转换失败,将不会进行保存。bobo aaa,由于aaa无法转换成int,所以age变量的值仍然为初始化的数值0。
	//Scanf遇到换行符或EOF的时候终止读取,可指定分隔符,其中上面的是%s %d中间的空格就是分隔符(给定的分隔符)。
	fmt.Println("fmt.Scanf:输入姓名和年龄,使用空格分隔:")
	fmt.Scanf("%s %d",&name,&age)
	fmt.Printf("fmt.Scanf指定默认分隔符为空格->name: %s age: %d\n", name, age )

	//下面指定#作为分隔符(注意#左右都有空格,这个必须要有,首先至少一个空格,然后一个冒号,再至少一个空格:)
	fmt.Println("fmt.Scanf:输入姓名和年龄,并指定 # 作为分隔符:")
	fmt.Scanf("%s # %d",&name,&age)
	fmt.Printf("fmt.Scanf指定分隔符为#->name: %s age: %d\n", name, age )


	//如果使用的是fmt.Scan(),则输入数据时可以输入换行,Scan()会将换行符作为空格进行处理,直到读取到了2个记录之后自动终止读取操作
	fmt.Println("fmt.Scan:输入姓名和年龄,输入数据时可以输入换行,Scan()会将换行符作为空格进行处理,直到读取到了2个记录之后自动终止读取操作:")
	fmt.Scan(&name,&age)
	fmt.Printf("fmt.Scan输入数据时可以输入换行,Scan()会将换行符作为空格进行处理,直到读取到了2个记录之后自动终止读取操作->name: %s age: %d\n", name, age )

}

 

package main

import "fmt"

func main()  {
	//默认以【空格】为分隔符

	//Sscan家族的函数用于从【给定字符串】中读取数据,用法和Scan家族类似。
	//会将换行符作为空格进行处理,直到读取到了指定个数的记录之后自动终止读取操作
	//func Sscan(str string, a ...interface{}) (n int, err error)
	//func Sscanln(str string, a ...interface{}) (n int, err error)
	//func Sscanf(str string, format string, a ...interface{}) (n int, err error)
	var name string
	var age int

	var (
		courseName string
		courseTeacher string
		coursePrice float32
		courseInfo string
	)
	str := "波哥 20"

	fmt.Sscan(str,&name,&age)
	fmt.Printf("fmt.Sscan会使用空格做为分隔符去字符串中做匹配 ->name: %s age: %d\n", name, age)


	fmt.Scan(&courseName,&courseTeacher,&coursePrice)
	//如果使用的是fmt.Scan(),则输入数据时可以输入换行,Scan()会将换行符作为空格进行处理,直到读取到了2个记录之后自动终止读取操作
	courseInfo = fmt.Sprintf("课程名称:%s 课程讲师:%s 课程价格:%v",courseName,courseTeacher,coursePrice)

	fmt.Sscan(courseInfo,&courseName,&courseTeacher,&coursePrice)
	fmt.Println("courseName->",courseName)
	fmt.Println("courseTeacher->",courseTeacher)
	fmt.Println("coursePrice->",coursePrice)



	fmt.Sscanf(str,"%s %d",&name,&age)
	fmt.Printf("fmt.Sscanf会使用指定的分隔符去字符串中做匹配 ->name: %s age: %d\n", name, age)

	str = "波哥\n20"
	fmt.Sscanln(str,&name,&age)
	fmt.Printf("fmt.Sscanln会使用指定的换行符去字符串中做匹配 ->name: %s age: %d\n", name, age)

}
文章作者: 全栈编程@luboke.com
版权声明: 本文章为go语言体系课视频教程配套电子书,版权归 全栈编程@luboke.com所有,欢迎免费学习,转载必须注明出处!但禁止任何商业用途,否则将受到法律制裁!
copyright © 2020 全栈编程@luboke.com