201.go 从键盘读取数据

使用fmt.XXX方法

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

var (
	a string
	b int
	c bool
)

func test_fmt() {
	n, err := fmt.Scanf("%s %d %t", &a, &b, &c) // hello 10 true
	// fmt.Scanf会将你通过空格分隔的字符串填充到对应的为, 返回n表示正确填充数, err表示是否出错,遇到换行结束
	fmt.Println(n, err)
	fmt.Println(a, b, c)
}

func test_fmt2() {
	n, err := fmt.Scanln(&a, &b, &c) // hello 10 true
	// fmt.Scanln会将你通过空格分隔的字符串填充到对应的为, 返回n表示正确填充数, err表示是否出错, 遇到换行结束
	// 可以发现不需要输入类型, 他会根据你定义的类型进行推断
	fmt.Println(n, err)
	fmt.Println(a, b, c)
	fmt.Printf("%T %T %T\n", a, b, c)
}

使用bufio 读取整行数据

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

var (
	a string
	b int
	c bool
)

func test_bufio() {
	// 从stdin中取内容直到遇到换行符,停止, 读取一整行不对其中的空格进行处理
	input, err := bufio.NewReader(os.Stdin).ReadString('\n')
	if err != nil {
		panic(err)
	}
	fmt.Println("你输入的内容是:", strings.TrimSpace(input)) // 你输入的内容是: hello 10 int
}

func test_bufio2() {
	fmt.Println("请输入需要打印的内容, exit表示退出")
	input := bufio.NewScanner(os.Stdin) // 突然想到了java的从键盘读取数据
	for {
		fmt.Print(">>> ")
		input.Scan()  // 读取用户数据
		if strings.Compare(strings.TrimSpace(input.Text()), "") == 0 {
			continue
		}
		if strings.Compare(strings.TrimSpace(input.Text()), "exit") == 0 {
			os.Exit(0)
		}
		fmt.Println("输入的内容是:", input.Text())
	}
}

参考:

  1. https://zengweigang.gitbooks.io/core-go/content/eBook/12.1.html go语言入门
    2.https://studygolang.com/pkgdoc go包中文文档
posted @ 2021-10-12 14:46  楠海  阅读(144)  评论(0)    收藏  举报