当前位置: 首页 > article >正文

Go语言--语法基础5--基本数据类型--输入输出(1)

I : input 输入操作 格式化输入 scanf
O output 输出操作 格式化输出 printf
标准输入 == 》键盘设备 == Stdin
标准输出 == 》显示器终端 == Stdout
异常输出 == 》显示器终端 == Stderr
1 、输入语句
Go 语言的标准输出流在打印到屏幕时有些参数跟别的语言(比如 C# Java )不同,
fmt 包实现了类似 C 语言 printf scanf 的格式化 I/O
Go 语言 fmt 包下有
// 终端获取
func Scan (a ...interface{}) (n int, err error)
func Scanln (a ...interface{}) (n int, err error)
func Scanf (format string, a ...interface{}) (n int, err error)
其中 fmt.Scan fmt.Scanf fmt.Scanln 三个函数,可以在程序运行过程中从标准输入获取用户的输入。
func Scan(a ...interface{}) (n int, err error)
// 输入数据数量达标即可提交
举例如下:
func main() {var (name stringage intmarried bool)fmt.Scan(&name, &age, &married)fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age,
married)
}
func Scanf(format string, a ...interface{}) (n int, err error)
// 输入多次达到要求格式数据数量即可提交。 不区别换行和空格
举例如下:
func main() {var (name stringage intmarried 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)
}
func Scanln(a ...interface{}) (n int, err error)
//回车换行提交数据,数据输入一行。 中间不能有空白符 空格,TAB键 。。。
举例如下:
func main() {var (name stringage intmarried bool)fmt.Scanln(&name, &age, &married)fmt.Printf("扫描结果 name:%s age:%d married:%t \n", name, age,
married)
}
建议读取控制台数据
调用 fmt.Scan 等方法
var j string
fmt.Scanln(&j) // Scanln 读取一行
fmt.Println("j = ", j)
或者指定输入格式
var j string
var m float32
var n bool
fmt.Scanf("%d%f%s%t", &i, &m, &j, &n)
fmt.Println("i = ", i, "j = ", j, "m = ", m, "n = ", n)
输入时按空格或回车区分即可
注意一个问题:
func main(){
var input byte
fmt.Println("请输入一个字母")
scan, err := fmt.Scan(&input)
if err != nil {
fmt.Println("err:", err)
}
fmt.Println(scan)
fmt.Printf("the anser is %c", input)
}

这里面定义一个变量接受 byte 但是却无法接收到。
这是因为 byte 类型本质是 uint8 类型的,所以应该传入整数的, 字母对应的 ASCII码值
但是还是要想传入字符类型 可以使用 scanf 进行,代码如下。
func main(){
var input byte
fmt.Println("请输入一个字母")
_, err := fmt.Scanf("%c", &input)
if err != nil {
fmt.Println("err:", err)
}
fmt.Printf("the anser is %c", input)
}

第二个问题: %c 的空格也会识别到比如下面代码

练习:
使用 fmt.Scanf fmt.Scanln 两种不同方式获取用户输入整数,比较后将大 的数字输出。
补充:
如果读取不带空格的数据可以使用 fmt.Scan fmt.Scanln 读取一个或多个值, 但是不能读取带空格的数据,可以使用bufio os 两个包结合
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// os.Stdin将终端中输入的数据写入到Stdin这个文件中去
reader := bufio.NewReader(os.Stdin)
fmt.Print("请输入一行数据,带空格也行:")
// line 从Stdin中读取一行的数据,(字节的切片)可以转换成字符串
5/126/12
// reader默认一次能读4096个字节,一个汉字是三个字节
// 一次性读完:isPrefix就等于false
// 先读一部分:isPrefix等于true
line, isPrefix, err := reader.ReadLine()
// 将字节的切片转换成字符串
data := string(line)
fmt.Println(line, isPrefix, err)
fmt.Println(data)
}
or 更简单
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
var msg string
reader := bufio.NewReader(os.Stdin) // 标准输入输出
msg, _ = reader.ReadString('\n') // 回车结束
msg = strings.TrimSpace(msg) // 去除最后一个空格
fmt.Printf("input=%s\n", msg) //结果输出
}
http://www.lryc.cn/news/2405012.html

相关文章:

  • 永磁同步电机无速度算法--自适应龙贝格观测器
  • LangChain工具集成实战:构建智能问答系统完整指南
  • 【razor】x264 在 的intra-refresh和IDR插帧
  • 分库分表的取舍
  • 随机算法一文深度全解
  • 在 Conda 环境下配置 Jupyter Notebook 环境和工作目录
  • MS39531N 是一款正弦驱动的三相无感直流电机驱动器,具有最小振动和高效率的特点
  • web3-基于贝尔曼福特算法(Bellman-Ford )与 SMT 的 Web3 DeFi 套利策略研究
  • 分析 java 的 Map<String,Map<String, List<Map<String,Integer>>>>
  • ChatterBox - 轻巧快速的语音克隆与文本转语音模型,支持情感控制 支持50系显卡 一键整合包下载
  • 前端开发面试题总结-HTML篇
  • 嵌入式学习--江协stm32day4
  • 【Matlab】连接SQL Server 全过程
  • MS8551/MS8552/MS8554 单电源、轨到轨输入输出、高精度运放,可替代AD8551/AD8552/AD8554
  • 什么是 Ansible 主机和组变量
  • F#语言的区块链
  • 9.RV1126-OPENCV 视频的膨胀和腐蚀
  • 查找 Vue 项目中未使用的依赖
  • 华为OD机考-内存冷热标记-多条件排序
  • UDP 与 TCP 调用接口的差异:面试高频问题解析与实战总结
  • AI时代:学习永不嫌晚,语言多元共存
  • 『React』Fragment的用法及简写形式
  • 强化学习入门:交叉熵方法数学推导
  • CSS3 的特性
  • Vue前端篇——Vue 3的watch深度解析
  • 行为型设计模式之Mediator(中介者)
  • 三维图形、地理空间、激光点云渲染技术术语解析笔记
  • 从webrtc到janus简介
  • JVM 核心概念深度解析
  • api将token设置为环境变量