当前位置: 首页 > 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) //结果输出
}
http://www.xdnf.cn/news/932779.html

相关文章:

  • 【Go语言基础【17】】切片:一种动态数组
  • 如何利用 OpenCV 进行实时图像处理与对象检测
  • LeetCode - 560. 和为 K 的子数组
  • 持续交付的进化:从DevOps到AI驱动的IT新动能
  • 博图 SCL 编程技巧:灵活实现上升沿与下降沿检测案例分享(上)
  • Bootstrap 5学习教程,从入门到精通,Bootstrap 5 图像形状(Image Shapes)语法知识点及案例代码(8)
  • 基于 Transformer robert的情感分类任务实践总结之三——FGM
  • 从代码学习深度强化学习 - 多臂老虎机 PyTorch版
  • 【深度学习|学习笔记】自监督学习(Self-Supervised Learning, SSL)在遥感领域中的典型应用案例及其在小样本学习中的作用,附代码。
  • LeetCode --- 452周赛
  • 高保真组件库:按钮
  • GitHub 趋势日报 (2025年06月07日)
  • Langgraph实战-自省式RAG: Self-RAG
  • 材料力学速通
  • 北京工作周期7,8,9,10
  • 【react实战】如何实现监听窗口大小变化
  • 2025HNCTF - Crypto
  • webstorm 配置Eslint
  • Springboot 基于MessageSource配置国际化
  • C#调用Rust动态链接库DLL的案例
  • ​RBAC(基于角色的访问控制)权限管理详解
  • 学习日记-day24-6.8
  • 鸿蒙API自翻译
  • 70常用控件_QVBoxLayout的使用
  • 指针的使用——字符、字符串、字符串数组(char*)
  • C++进阶--C++11--智能指针(重点)
  • 12.7Swing控件6 JList
  • gitcode与github加速计划
  • LabVIEW Modbus 主站冗余控制
  • css | class中 ‘.‘ 和 ‘:‘ 的使用 | 如,何时用 .is-selected{ ... } 何时用 :hover{...}?