常见获取输入的方式
目录
1.获取同一行的n个数据
|
|
2.获取n行数据
从键盘获取n,然后获取n行数据。
|
|
3.获取未知行数的数据
从键盘获取多行文本,直到用户输入一个空行为止。
|
|
这种方式是最通用的,无论输入什么数据类型,输入多少行,程序都可以正常接收,接收到数据的都是 string 类型。
但这种方式也存在弊端,那就是我们在输入数据时,数据类型不一定是字符串类型,上面这种方式还需要进一步的数据类型转换。
在已经明确输入数据类型时,我们可以采用下面的方式:
|
|
在上面的例子中,我们也可以获取位置行数的数据,当输入结束时(键入回车符),err 不为空,那么我们就可以结束 for 循环了。
4.fmt.Scan与fmt.Scanln
相同点
-
读取标准输入:两者都用于从标准输入(stdin)读取用户输入的数据。
-
接收多个参数:两者都可以接收多个参数,用于读取多个值。
当接收多个参数时,多个空格或制表符都会被视为 1 个空格。
比如:
1 2
fmt.Scanln(&a, &b, &c) fmt.Println(a, c, b)
输入:
1
1 3 4
输出:
1
1 4 3
-
返回读取的项数和错误:两者都返回读取的项数(成功读取并赋值的参数个数)以及可能发生的错误(例如输入/输出错误)。
不同点
fmt.Scan
会把换行符当做空格来分隔多个输入的值;但fmt.Scanln
只读取换行符之前的数据。
也就是说:
fmt.Scan
可以一次读取多行的数据,而fmt.Scanln
只能读取一行的数据。
fmt.Scan
示例:
|
|
输入:
|
|
输出:
|
|
fmt.Scanln
示例:
|
|
输入:
|
|
输出:
|
|
只会读取回车符前面的值,后面没有读取成功的值会被赋值为 0。
5.获取n行的字符串
现在已知 n,需要获取 n 行的字符串,但每行的字符串中间可能存在空格(空格数未知)。
如:hello world
。
如果使用下面的代码来获取:
|
|
这样只会读取空格前的字符串。
为了解决这一问题,我们可以使用下面的代码:
|
|
reader.ReadLine()
的 3 个返回值;
line []byte
: 读取到的一行数据(不包含换行符),如果读取的数据超过了缓冲区的大小,可能会返回部分行,并且isPrefix
会被设置为true
。isPrefix bool
: 如果读取的数据太大以至于无法放入缓冲区中,并且返回的数据只是行的一部分,则此值为true
。否则为false
。err error
: 读取过程中遇到的错误,如果到达文件末尾(EOF),则err
会是io.EOF
。