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

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) //结果输出
}

相关文章:

  • 计算机常用快捷键分类汇总,涵盖 Windows、macOS 以及通用软件场景
  • 20242817李臻-安全文件传输系统-项目验收
  • Android 集成 Firebase 指南
  • Alight Motion汉化版:视频剪辑,轻松上手
  • 基于安卓的文件管理器程序开发研究源码数据库文档
  • surfer15安装
  • web架构4------(nginx常用变量,nginx中英文自动匹配,lnmp网站架构,正向代理,反向代理,负载均衡)
  • 力扣面试150题--课程表
  • 【P2P】直播网络拓扑及编码模式
  • 基于PostGIS的各地级市路网长度统计及Echarts图表可视化实践-以湖南省为例
  • Spring缓存注解的陷阱:为什么@CacheEvict删不掉Redis缓存?
  • 5G-A通感融合对监控监督体系的核心作用
  • MySQL知识回顾总结----数据库基础
  • Python 训练营打卡 Day 46
  • 跨境收单流程
  • LabVIEW Modbus 主站冗余控制
  • LabVIEW多道心电记录仪
  • el-table的select回显问题
  • 【深度学习】表示学习:深度学习的数据解构与重构艺术
  • Spring AI 项目实战(六):Spring Boot + AI + DeepSeek 打造智能成语接龙游戏(附完整源码)
  • 做神马网站优化快速排名软件/国家培训网官网
  • 怀化找什么人做网站/百度提交入口网址
  • wordpress腾讯地图插件/青岛网络seo公司
  • 有没有专门发布毕业设计代做网站/中国最新新闻
  • 外贸网站怎样做推广/今日国际新闻事件
  • 373网站怎么做这样的网站/懂得网站推广